WEB开发网
开发学院软件开发VC 常用编码详解 阅读

常用编码详解

 2007-07-21 21:36:06 来源:WEB开发网   
核心提示: 六、GB2312编码中汉字的确定最早,表示汉字的区位码中,常用编码详解(9),分为94个区,每个区94个汉字,或者在类中加如其他的操作来处理,比如析构函数中释放,1-15区是西文字符,图形等

六、GB2312编码中汉字的确定

最早,表示汉字的区位码中,分为94个区,每个区94个汉字,1-15区是西文字符,图形等,16-5为一级汉字,56-87为二级汉字,87区以上为新字用。而我们在Windows默认的编码,GB2312(1981年国家颁布的《信息交换用汉字编码字符集基本集》)国标码,和区位码的换算为:

国标码 = 区位码 + 2020H

而在汉字在计算机内表示的时候为保证ASCII码和汉字编码的不混淆,又做了一个换算:

汉字机内码 = 国标码 + 8080H

所以,真正的在Windows上的GB2312汉字编码是机内码,从上边的两个公式可以得到的就是:

汉字机内码 = 区位码 + a0a0H

一个汉字的编码最少要a0a0H,因此我们在CString中辨别汉字的时候可以认为:当一个字符的编码大于a0的时候它应该是汉字的一个部分。但是也有特殊的情况的,不是每个汉字的两个字节编码都是大于a0H的,例如‘镕’的编码是 ‘E946’,后面的部分就不满足大于a0H的条件。

七、Windows下多字节编码和Unicode的转换

Windows提供了API函数,可以把Unicode字符数组转换为GB2312字符串。其中,Unicode数组在传入时候最后一个为0,也就是所谓的null termidated字符串。在函数内部得到要返回字节串的大小,请求空间,进行真正的转换操作,指针在外部使用后释放,或者在类中加如其他的操作来处理,比如析构函数中释放。返回值为写到字节串里数目。int StringEncode::UnicodeToGB2312(char **dest, const WCHAR *src)
{
  char* buffer;
  int size = ::WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, 0, NULL, NULL); 
  // null termidated wchar''s buffer
  buffer = new char[size];
  int ret = ::WideCharToMultiByte(CP_ACP, NULL, src, -1, buffer, size + 1, NULL, NULL);
  if (*dest != 0)
    delete *dest;
  *dest = buffer;
  return ret;
}

上一页  4 5 6 7 8 9 10  下一页

Tags:常用 编码 详解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接