音标教学:GBK编码和UTF-8会不会起冲突

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 13:27:43
在没有BOM的情况下,会不会产生两个UTF-8的3字节字符被认成3个GBK的字符呢?不知道系统是怎么区分的?因为UTF-8和GBK的每个字节的最高位好像都是1

UTF-8 是 “Unicode Transformation Format - 8-bit.“
通常不含BOM,尽管允许含BOM。

UTF用于Unicode,不直接用于GBK。

GBK也好,GB2312-1980也好,GB18030-2000也好,要先转成Unicode编码,再对Unicode编码进行UTF编码。

UTF-8 编码算法:
读取一个无符号数,做:
if (c<0x80) b1 = c>>0 & 0x7F | 0x00
b2 = null
b3 = null
b4 = null
else if (c<0x0800)
b1 = c>>6 & 0x1F | 0xC0
b2 = c>>0 & 0x3F | 0x80
b3 = null
b4 = null
else if (c<0x010000)
b1 = c>>12 & 0x0F | 0xE0
b2 = c>>6 & 0x3F | 0x80
b3 = c>>0 & 0x3F | 0x80
b4 = null
else if (c<0x110000)
b1 = c>>18 & 0x07 | 0xF0
b2 = c>>12 & 0x3F | 0x80
b3 = c>>6 & 0x3F | 0x80
b4 = c>>0 & 0x3F | 0x80
end if

正转:GBK -> Unicode -> UTF-8
反转: UTF-8 -> Unicode -> GBK 或 GB2312 或 GB18030

所以GBK编码和UTF-8不会起冲突。