学习UNICODE
来源:互联网 发布:新纪元软件破解版 编辑:程序博客网 时间:2024/06/05 22:58
前言
昨天为了编译一个网上下载程序,下载vs2008,转换工程并加入自己的部分程序,最后还是运行不了。郁闷之余,查看错误,发现原来自己的代码有问题。比如vs2008不再支持<iostream.h>之类的。还有就是我的代码没有“国际化”意识(从不考虑Unicode)。所以下定决心学一下unicode,结果还是令自己满意的。以下分享一些心得(哈哈,大部分网上找的),望对你有用。
1.让工程支持unicode编译
*
这里先解释一下使用unicode的原因:如果要让你的软件支持多国语言,也就是国际化吧,比如东亚语系cjk(中日韩),由于这些国家语言的每个字符都是以宽字符(wide character即两个字节)表示的,而unicode字符集(unicode character set)是一个宽字符集,所以自然的使用unicode就顺理成章了。
下面就说一下如何在vc6中进行unicode编译
*
写的一段代码涉及到MBCS编码和UNICODE编码的相互转换,查了一下MSDN的相关资料,在VC6中,默认使用MBCS编码,即多字节字符,实际就是支持大于0x80的ASCII码。这样,一个中文字可以表示为2个字节,GB2312就是这样表示的。
VC6的默认安装是不带UNICODE库的,要在VC6中写UNICODE程序,必须安装CRT和MFC的Unicode库。
要使你的程序支持Unicode,要在你的项目属性中去掉"_MBCS"宏定义,增加"UNICODE"和"_UNICODE"两个宏定义。(注意,这两个都应该加上,因为CRT和MFC使用UNICODE 定义,而STL则使用_UNICODE)
如果你的程序是MFC的,则Unicode版MFC库的入口点是 wWinMainCRTStartup。
很好的文章,大家可以看看, Win32字符编码http://noshape.bokee.com/4749054.html
*
为 vc 工程添加 Unicode Debug 和 Unicode Release
通过使用unicode编译,软件可以适应多种情况,如何在自己的工程中添加这两种编译方式呢?下面是一个简单的步骤
1、新建一个工程;
2、选择“Build->Configurations”菜单
3、(1)点击“Add”按钮,添加“Unicode Debug”-拷贝“win32 Debug”配置
(2)添加“Unicode Release”-拷贝“win32 Release”配置 ,然后点击“OK”
4、选择“Project->Setting”菜单
(1)选 Win32 Unicode Debug :
切换到“c/C++ ” Tab页 从下拉列表框中选择 “Preprocessor” ,去掉_MBCS,添加UNICODE,_UNICODE(注意逗号隔开) ,如果是MFC程序,还要在
link中,Category选output,将Entry-Point Symbol设为wWinMainCRTStartup
(2)选 Win32 Unicode Release
切换到“c/C++ ”Tab页 从下拉列表框中选择 “Preprocessor” ,去掉_MBCS,添加UNICODE,_UNICODE(注意逗号隔开) ,如果是MFC程序,还要在
link中,Category选output,将Entry-Point Symbol设为wWinMainCRTStartup
相关文章:http://www.codeproject.com/cpp/unicode.as
*
*
*
*
选择Win32 Debug Unicode
选择Win32 Release Unicode
2.如何编写一份原代码,使他支持ANSI和Unicode
1.使用ANSI/UNICODE都支持的函数:
包含TChar.h.这个里面包含了ANSI和Unicode的两类函数.
那么:ANSI Unicode Both
strcpy wcscpy _tcscpy
其中:wcs 代表 wide character string
_tcs代表Both,他在TChar.h中根据编译器的设置展开,如果设置了_UNICODE,那么他就展开为wcscpy
2.使用_TEXT()来包围字符串
_TEXT("我即可以编译成ANSI,也可以被编译成UNICODE!")//变态吧
3.使用os(这里是指windows)的函数和类型
windows中支持ANSI和UNICODE的类型如下:
ANSI UNICODE Both
CHAR WCHAR TCHAR
PSTR PWSTR PTSTR
PCSTR PCWSTR PCTSTR
W代表wide,T代表通用.
windows中支持ANSI和UNICODE的函数:
他们是大小写相结合的,与C run-time 库的函数名(都是小写的)一样.
windows StrCat .
C run-time 库 strcat.
3.使用通用字符串函数
(1)如:
_stprintf
_tcsncpy
_tcslen();
更多的自己网上找啦。
(2)
字符串的实际长度应该是 sizeof(str)/sizeof(TCHAR),而不是原来的sizeof(str)
如: TCHAR text[100];
::GetWindowText(m_hWnd,text,sizeof(text)/sizeof(TCHAR));
(3)stl 的unicode版本
自己定义
#ifdef _UNICODE
#define tstring wstring
#define tostringstream wostringstream
#else
#define tstring string
#define tostringstream ostringstream
#endif
详细的请看 :http://www.vckbase.com/document/viewdoc/?id=1293
4.以后写代码都要考虑支持unicode,这个倒不是问题。问题是我以前的程序要转换过来,估计又是一段痛苦的经历了。但没关系,正如伟大的邓小平所言:“道路是曲折的,前途是光明的。”
5.资料来自于网络。
- Unicode学习
- unicode学习
- 学习UNICODE
- 学习 unicode
- unicode学习小结
- unicode学习小结
- python 学习~unicode 编码
- unicode exp学习
- Unicode 字符集学习笔记
- 关于unicode的学习
- Unicode学习笔记
- Unicode学习笔记
- Unicode与UTF-8学习
- [API学习]字符串类型Unicode
- 学习笔记-关于字符集Unicode
- python学习之unicode编码
- swift学习笔记 - Unicode转码
- Unicode
- 关于C++的一些总结
- 我的mysql筆記
- 他俩很般配应该这么说
- 主机名反查IP
- phper需要掌握什么?
- 学习UNICODE
- my Eclipse 6.5 注册码 sn 到2011年6月19日 20110619
- MSDTC on server '''' is unavailable. 的解决办法
- 生活英语—国外情侣之间最流行的英文昵称
- ThreadLocal(随便记些……)
- 时尚英语—"烦得要死"的十种不同说法
- JAVA IO (1)
- Joomla 开发1
- 寻找......