GB18030和Unicode有什么区别?

14

中国的GB18030编码集与Unicode有何不同?

处理GB18030需要什么特殊技术?

是否有(开源)库可以处理GB18030?


3
你混淆了字符集(如Unicode)和字符编码方案(如GB18030、ISO Latin-1..15、UTF-[7,8,16,32])。 - Sebastian
2个回答

17
根据维基百科GB18030条目,“GB18030可以被认为是Unicode转换格式(即所有Unicode代码点的编码),并与传统字符集保持兼容性。” 也就是说,所有Unicode字符都可以在GB18030中编码,但是它们将使用与UTF-8或UTF-16生成的不同的字节序列进行编码。 处理GB18030编码并不需要比处理任何其他非Unicode编码更多的特殊技术。

ICU项目是一个开源库(适用于C或Java),完全支持许多不同的编码,包括GB18030。有关使用ICU在不同编码之间进行转换的信息可以在这里找到:此处


谢谢提供这些信息。我对ICU有一定的了解,但我不知道它也支持GB18030。 - Jonathan Leffler
1
维基百科错误地称“GB18030可以被视为Unicode转换格式”。写这篇文章的人不理解“转换格式”的含义。如果有一种算法方式可以在没有映射表的情况下在GB18030和Unicode之间进行映射,则可以认为这是有效的。如果涉及到映射表,则两者只是可以覆盖相同字符集的两个独立编码。与KOI8-R不是iso-8859-5的“转换格式”,Shift-JIS也不是EUC-JP的“转换格式”一样。 - Mihai Nita
6
根据Unicode词汇表,转换格式是指"从编码字符序列到唯一代码单元序列的映射(通常是字节)",而编码字符序列则是 "一个或多个码点的有序序列"。只要每个Unicode码点都能被映射为一系列字节,那么它就可以被视为"Unicode转换格式"。 - Bradley Grainger
Unicode是一种开放标准,意味着其中的字符随着时间的推移会增加(或被修改)。因此,我相信在某个时间点上,Unicode和GB18030的快照共享相同的字符集。但从长远来看,这两者可能会分道扬镳。 - Kun Wu
@KunWu:Unicode 2.0及其之后版本定义了最多1,112,064个代码点。GB 18030定义了如何在它们之间进行映射。如果Unicode超越此限制,UTF-16本身也将被破坏。 - wswartzendruber

15
处理GB18030需要注意的最大问题是,与UTF-8不同,GB18030允许ASCII字节出现在多字节字符的编码中。(例如,'ß'被编码为字节81308938,其中包含了数字'0'和'8'的ASCII编码)。这意味着您不能使用简单的面向字节的find/index函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接