GBK是汉字字符编码,是gb2312的扩充。
GBK汉字是从0x8140开始的,unicode是从0x4e02开始的。需要一个转换表,这个很难找。
先将gbk转成unicode字符,gbk与unicode对应关系如下:
gbk是两个字节的,第一个字节h,第二个字节l
GBK/3: 8140-A0FE
h的范围是从0x81-0xA0, l范围从0x40-0xFE
unicode是从0x4e02-0x7DBE .开始中间需要剔除一些。
index 是unicode的转换表下标。
转换方法如下:
index = (h-0x81)*(0xFE-0xA0+1)+(l-0x40);
通过转换表,得到相应的unicode编码。
再利用utf-8编码规则:
1、单字节符号 字节第一位为0;后面7位是这个符号的unicode编码
2、n字节符号(n>1)
第一个字节的前n位是1,后面是个0;
后面字节的前两位是10;
剩下的没有说到的二进制位,是这个符号的unicode编码
unicode | UTF-8
十六进制 | 二进制
0000 0000 - 0000 007F | 0XXXXXXX
0000 0080 - 0000 07FF | 110XXXXX 10XXXXXX
0000 0800 - 0000 FFFF | 1110XXXX 10XXXXXX 10XXXXXX
0001 0000 - 0010 FFFF | 1111XXXX 10XXXXXX 10XXXXXX 10XXXXXX