Let's Unicoding!
Let's Unicoding!
升级以后的blog-city的编辑框有问题,有时候出现不了那些字体按钮什么的,有时候往里面贴的文字(我都是在记事本里写好再粘贴)会自动变成这是这样的形式,然后就能在英文环境里阅读了。有时候又不会,还是GB2312编码。我以为这些数字就是汉字的内码,写了个工具打出来一看,又不对。怒了,GB2312的页面每次都要重新选语言,真麻烦。于是研究了一下汉字编码问题。现有的编码
(一)台湾地区 1.Big 5:俗称大五码 2.Big 5 plus:Big 5扩编码 3.CNS11643:中文标准交换码
(二)中国大陆 1.GB2312-80:通称国标码 2.GBK :汉字内码扩展规范 3.GB13000 可以是1,2,4字节的扩展规范
(叁)日本 1.Shift JIS 2.EUC-JIS
(四)韩国 1.KSC 5601
当中各种国际及国家标准文号都不表了。从大陆的汉字编码的演变来看,主线是:
gb2312/big5 --> GBK(支持繁简两体)--> CJK(Unicode) 现在的Windows2000操作系统支持GBK和CJK. 另外对GB和BIG5也有支持。
以上三代标准的内码都不同的,需要转换。从长远看,势必过渡到Unicode. Google是这方面的典范。用google时,它用zh-CN(具体是什么是用你的本地缺省编码)编码输入的汉字,再用%符号编码,到google的网站后它会把内容转换成unicode, 这就势为什么用简体汉字能搜到繁体和日文网站的原因,因为有些字在CJK里是中日韩共用的。
回到我开头的问题来,那些数字是Unicode的内码,不是GBK的。明白这一点就好做了,需要把自己的程序改成Unicode的,在VC里面: 字符串都用TCHAR,用TEXT修饰字符串常量以及字符串操作函数都用_t打头的就不用说了;在Project Settings->C/C++->Catagory->Preprocessor里面加上UNICODE和_UNICODE两个宏定义。没有下划线的是专门用于 Windows 头文件;后者有一个前缀下划线,专门用于 C 运行时头文件。最后还有重要的一点,一定要在link中,Category选output,将Entry-Point Symbol设为wWinMainCRTStartup,要不会报连接错误。 代码如下:
CString input;
... ... // to get the input string
unsigned int length = (unsigned int)input.GetLength();
CString result, sv;
TCHAR c = '\0';
char *cc = (char*)&c;
cc++;
for( unsigned int i =0; i < length; i++) {�
��� c = input.GetAt(i);�
��� if( (*cc) != 0) // If the higer byte of TCHAR c is not 0, encode it�
��� {
������� sv.Format( TEXT("%d;"), c);�
������� result += sv;�
��� }�
��� else�
������� result += c;�
}
最后收罗几个链接:
1. UTF-8 and Unicode FAQ
2. UTF-8 and Unicode FAQ中文版
3. CJK组织
4. Jock的主页
posted 2004.03.09 Tuesday
分类
Technology

发表评论