|
发表于 2005-4-13 19:41:34
|
显示全部楼层
locale = GB2312/GB18030/GBK
输入汉字"汉字"后转化为汉字对应的GB编码。比如是0xa1 0xb2 0xa2 0xb3
因此字符串"汉字"转化为{0xa1, 0xb2, 0xa2, 0xb3},
显示的时候根据locale将{0xa1, 0xb2, 0xa3, 0xb4}具体解码为(locale)对应的字符。
GB时>0xa1认为时, eg:
0x20, 0x36, 0xa1, 0xb2, 0xa2, 0xb3, 0x38, 0x20
==> ' ', '6', '汉'(2 byte), '字'(2byte), '8', ' ',
注意0xa1 0xb2, 0xa2 0xb3 并不对应"汉字"的GB编码。
汉字进行GB解码,index = 0xa1|0xa2, GBIndexToUnicode可转换为Unicode码。
UTF8稍微复杂,不过任何编码本质都是相似的。
因此能直接printf出汉字仅仅因为显示终端的locale对应的GBxxx编码。
如果locale不是GBxxx,则显示未其他编码对应的字符。
关于多种编码及相互转换可以参考libiconv,里面非常全面。 |
|