读书人

关于字符串处理的一些有关问题

发布时间: 2012-02-28 13:06:34 作者: rapoo

关于字符串处理的一些问题
我在自己的机器上做了一个小测试,开发环境VS2005,得到了一些让我比较疑惑的结果。

代码如下:
#include "stdafx.h "
#include "iostream "
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char *str = "ASCII string 我是中国人 ASCII string ";
wchar_t *wStr = L "Unicode string 我是中国人 Unicode string ";
TCHAR *tStr = _T( "TCHAR string 我是中国人 TCHAR string ");

cout < <*str < <endl;
cout < <str < <endl;

wcout < <*wStr < <endl;
wcout < <wStr < <endl;

#ifndef _UNICODE
cout < <*tStr < <endl;
cout < <tStr < <endl;
#else
wcout < <*tStr < <endl;
wcout < <tStr < <endl;
#endif

return 0;
}
该代码分别在Multi-Byte Character Set, Unicode, No set 三个环境下进行编译得到一下结果:

---------NO set--------------
A
ASCII string 我是中国人 ASCII string
U
Unicode string T //1.中文以及后面的字符都没有先生出来?
TCHAR string 我是中国人 TCHAR string


------Use Multi-Byte Character Set-----

A
ASCII string 我是中国人 ASCII string
U
Unicode string T //2. 这里T之前居然没有换行?
TCHAR string 我是中国人 TCHAR string


-------Use Unicode Character Set--------
A
ASCII string 我是中国人ASCII string
U
Unicode string //3.TCHAR的字符没有显示出来?

问题:4.汉字在No set和 Multi-Byte Character Set 下, 内存中是什么样的编码方式?我知道汉字有GB2312, GBK等编码方式。


紧接着我把控制面板里的区域与语言中的高级里面的“Language for non-Unicode programs”从chinese改成了English(us),重启机器用vs2005再打开代码的时候
发现“我是中国人”字符串已经变成了乱码“ÎÒÊÇÖйúÈË ”

5. 我想这是不是应为我之前在vs2005输入中文的时候,保存的cpp是不是以ANSI方式保存的造成的?(记事本里面有好几种保存编码方式)

在没有做任何修改的情况下我有在三种不同编译方式下运行代码,得出的结果是:
--------------NO set--------------
A
ASCII string ASCII string
U
Unicode string Unicode string
T
TCHAR string TCHAR string

----------------Use Multi-Byte Character Set--------
A
ASCII string ASCII string
U
Unicode string Unicode string
T
TCHAR string TCHAR string


----------Use Unicode Character Set----------------
A
ASCII string ASCII string
U
Unicode string Unicode string
T
TCHAR string TCHAR string

问题:
6. 怎么三种情况下的结果都是一样? 还有为什么这些字符串没有像前一次运行时被自动截断?



7. 以后我们再处理中文时候应该注意些什么,比如对文件的命名,保存中文文档时等等


问题比较多,请高手指点指点,谢谢!

[解决办法]
稍等 ...
[解决办法]
我觉得只要管文件内容就行了,何必管文件名?即能打开就行了
你的硬盘分区是FAT32或者是老式的FAT格式的?
似乎ntfs都是采用类unicode的内码存放文件名的。

读书人网 >C++

热点推荐