首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

关于字符串处理的一些问题
我在自己的机器上做了一个小测试,开发环境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再打开代码的时候
发现“我是中国人”字符串已经变成了乱码“&Icirc;&Ograve;&Ecirc;&Ccedil;&Ouml;&ETH;&sup1;ú&Egrave;&Euml;   ”

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的内码存放文件名的。

热点排行