utf8和unicode编码究竟是什么关系?有何区别?
程序员文章站
2024-03-31 10:35:52
utf8 == unicode transformation format -- 8 bit ...
utf8 == unicode transformation format -- 8 bit
是unicode传送格式。即把unicode文件转换成byte的传送流。
utf8流的转换程序:
input: unsigned integer c - the code point of the character to be encoded (输入一个unicode值)
output: byte b1, b2,b3, b4 - the encoded sequence of bytes (输出四个byte值)
algorithm(算法):
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
=====================
unicode 是一种编码表格,例如,给一个汉字规定一个代码。类似 gb2312-1980, gb18030等,只不过字集不同。
=====================
一个unicode码可能转成长度为一个byte,或两个,三个,四个byte的utf8码,取决于unicode码的值。英文unicode码因为值小于0x80,只要用一个byte的utf8传送,比送unicode两个bytes快。
utf8是为传送unicode而想出来的“再编码”方法罢了。
utf8转unicode用我上面给的程序反算即可。
utf8是现有ascii系统转向unicode系统的一个过渡解决方案。utf8是保证 ascii兼容性,再向大字符集方向扩展。这是unicode推荐的方案。但是因 为解决问题的角度不同,对现有的中文系统不是好的解决方案。 一下连接提供了详细的 utf8编码的初步知识 http://www.acnis.com/modules.php?name=article&file=article&sid=102 参考资料:http://www.acnis.com/modules.php?name=article&file=article&sid=102
什么是unicode。unicode的基本目标是统一所有的编码,即它包含所有的字符集。这样只要一个系统支持unicode,那么,就能处理这些字符集。一般unicode有两个字节。现在的windows操作系统都是支持unicode的。
什么是utf8呢?utf8是一种unicode编码,即它的编码的字符集和unicode是一致的。但编码的方式不一样。对于英文字符来讲,utf8的编码和一般的一样,用到一个字节。但对于中文来讲,那么要用三个字节表示(记忆中是三个)。
utf8和unicode的缺点是在处理查找、搜索等问题时,好像算法上比较复杂,效率不高(记忆中)。
是unicode传送格式。即把unicode文件转换成byte的传送流。
utf8流的转换程序:
input: unsigned integer c - the code point of the character to be encoded (输入一个unicode值)
output: byte b1, b2,b3, b4 - the encoded sequence of bytes (输出四个byte值)
algorithm(算法):
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
=====================
unicode 是一种编码表格,例如,给一个汉字规定一个代码。类似 gb2312-1980, gb18030等,只不过字集不同。
=====================
一个unicode码可能转成长度为一个byte,或两个,三个,四个byte的utf8码,取决于unicode码的值。英文unicode码因为值小于0x80,只要用一个byte的utf8传送,比送unicode两个bytes快。
utf8是为传送unicode而想出来的“再编码”方法罢了。
utf8转unicode用我上面给的程序反算即可。
utf8是现有ascii系统转向unicode系统的一个过渡解决方案。utf8是保证 ascii兼容性,再向大字符集方向扩展。这是unicode推荐的方案。但是因 为解决问题的角度不同,对现有的中文系统不是好的解决方案。 一下连接提供了详细的 utf8编码的初步知识 http://www.acnis.com/modules.php?name=article&file=article&sid=102 参考资料:http://www.acnis.com/modules.php?name=article&file=article&sid=102
什么是unicode。unicode的基本目标是统一所有的编码,即它包含所有的字符集。这样只要一个系统支持unicode,那么,就能处理这些字符集。一般unicode有两个字节。现在的windows操作系统都是支持unicode的。
什么是utf8呢?utf8是一种unicode编码,即它的编码的字符集和unicode是一致的。但编码的方式不一样。对于英文字符来讲,utf8的编码和一般的一样,用到一个字节。但对于中文来讲,那么要用三个字节表示(记忆中是三个)。
utf8和unicode的缺点是在处理查找、搜索等问题时,好像算法上比较复杂,效率不高(记忆中)。