发表于:2010-02-10 14:26:42
楼主
这个链接是原文,里边介绍了相关的知识,讲得比较细. 不想过去看的兄弟,直接看下下边的,我贴了一部分关键回来,
http://www.cnitblog.com/wujian-IT/archive/2007/12/13/37671.html
http://space.ednchina.com/upload/2008/9/4/36de7c76-ea64-405d-b619-18fe2002287b.rar
利用查表法来进行Unicode->GB2312的转换,首先下载码表,一般码表都是将GB2312的放在前面,Unicode放在后面,这样对于我们来说不方便使用,所以我转换了下,将Unicode放在前面,而且按照从小到大排好序。(这里只需要考虑都为两个字节的情况,因为前面的UTF8->Unicode并没有将单字节的ASCII转换成Unicode)
(1)做表 这个是原来的样子:(压缩包即为原来码表文件)
0x8140 0x4E02 #CJK UNIFIED IDEOGRAPH
0x8141 0x4E04 #CJK UNIFIED IDEOGRAPH
0x8142 0x4E05 #CJK UNIFIED IDEOGRAPH
先弄成(这个可以写个小程序来做):
{ 0x4E02 ,0x8140 }, //CJK UNIFIED IDEOGRAPH
{ 0x4E04 ,0x8141 }, //CJK UNIFIED IDEOGRAPH
{ 0x4E05 ,0x8142 }, //CJK UNIFIED IDEOGRAPH
这样就可以把这些放在.h文件中了,下面是我的定义:
typedef struct unicode_gb
{
unsigned short unicode;
unsigned short gb;
} UNICODE_GB;
UNICODE_GB code_table【】 =
{
{ 0x4E02, 0x8140 }, //CJK UNIFIED IDEOGRAPH
{ 0x4E04, 0x8141 }, //CJK UNIFIED IDEOGRAPH
{ 0x4E05, 0x8142 }, //CJK UNIFIED IDEOGRAPH
。。。。。。省略
下面这一步也很简单,在VC中用冒泡排序法,对这个数组按照unicode值进行排序,如果需要可以联系我,把最终结果打印出来,在cmd下运行name > 1.txt就输出到文件,这样就有了一个按照unicode排好序的unicode->gb2312码表。
查找算法也不讲了,这里主要是告诉兄弟们,其实网上资源很多的. 给一个文件,给一个提示.