use*_*747 6 c++ winapi encoding
我想让我的Win32 C++应用程序能够在任何编码版本(UNICODE和ANSI)上播放.现在我有点困惑的是两个(或更多?)编码之间到底有什么区别?
为了使我的Win32应用程序交叉编码兼容,这意味着我必须通过我的代码并用std :: wstring替换每个std :: string,然后用 wchar_t*替换每个char,然后替换每个文字字符串("")用L""?
如果我的应用程序在UNICODE机器上运行并且我的应用程序中有一个std :: string会发生什么?
对于我的应用程序交叉编码兼容所需的步骤,您有什么建议吗?例如: - 将所有c_strings和字符串更改为其UNICODE等效项 - 将任何Win32函数更改为uncide版本(例如,从getenv()更改为_wgetenv())
如果我的应用程序在UNICODE机器上运行并且我的应用程序中有一个std :: string会发生什么?
计算机不是ANSI
或者是计算机所在Unicode
的操作系统.不支持Unicode的Windows的最后一个版本是Windows 3.11 for Workgroups.如果在UniCode上运行ASCII编译的应用程序.
两个(或更多?)编码之间到底有什么区别?
什么是ASCII?
ASCII是一种七位编码技术,它为美国英语中最常使用的128个字符中的每个字符分配一个数字.这允许大多数计算机记录和显示基本文本.ASCII不包括其他国家/地区经常使用的符号.
什么是Unicode?
回归ASCII的一个主要原因是你只能有256个不同的字符.但是,日语和阿拉伯语等语言有数千个字符.因此ASCII在这些情况下不起作用.结果是Unicode允许最多65,536个不同的字符.
Unicode是ISO和Unicode Consortium尝试开发电子文本的编码系统,其中包括现有的每个书面字母.Unicode使用8位,16位或32位字符,具体取决于具体的表示形式,因此Unicode文档通常需要的磁盘空间是ASCII或Latin-1文档的两倍.Unicode的前256个字符与Latin-1相同.
在Win32中,#define-ing UNICODE
和_UNICODE
宏支持UNICODE .反过来,这会导致程序使用Win32函数的Unicode变体.
对于我的应用程序交叉编码兼容所需的步骤,您有什么建议吗?
每个Win32函数(接受或返回一个字符串)有两个变体,一个用于ASCII,另一个用于Unicode.函数调用解析为其中之一,具体取决于是否定义了UNICODE宏.因此,您应该定义宏并开始使用Unicode版本的函数.例如:
每更换std::string
用std::wstring
,
更换每char
一个wchar_t*
替换每个文字string("")
与L""
利用的的TCHAR
Windows中支持等.
正如您所指出的那样,您需要注意的事项列表,请注意,这不是完整列表.
基本上,您必须在代码中使用类型和函数调用的所有Unicode版本.
归档时间: |
|
查看次数: |
8894 次 |
最近记录: |