学习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.资料来自于网络。

 

 

 

 

原创粉丝点击