在工作中,我遇到了许多使用Shift-JIS和其他编码的日语文本文件。对于所有计算机用户,这会导致许多mojibake(字符不可读)问题。Unicode旨在通过为所有语言定义单个字符集来解决此类问题,并且建议在Internet上使用UTF-8序列化。那么,为什么每个人都不能从日语专用的编码转换为UTF-8?UTF-8存在哪些问题或弊端?
在工作中,我遇到了许多使用Shift-JIS和其他编码的日语文本文件。对于所有计算机用户,这会导致许多mojibake(字符不可读)问题。Unicode旨在通过为所有语言定义单个字符集来解决此类问题,并且建议在Internet上使用UTF-8序列化。那么,为什么每个人都不能从日语专用的编码转换为UTF-8?UTF-8存在哪些问题或弊端?
Answers:
一言以蔽之:遗产。
由于Unicode是唯一的日语编码方式,因此在Unicode可用/流行之前就使用了Shift-JIS和其他编码。公司已经在仅支持Shift-JIS的基础架构上进行了投资。即使该基础结构现在支持Unicode,出于各种原因,它们仍然会受制于Shift-JIS,从它的工作原理到接触的问题,再到编码的原因,是什么?要迁移,所有现有的文档,是太昂贵。
出于相同的原因,有许多西方公司仍在使用ASCII或latin-1,但没有人注意到,因为它从未引起问题。
这些就是我记得没有将UTF-8或其他Unicode表示作为主要在日本开发的脚本语言Ruby的默认字符编码的原因:
显然,这种推理被日本用户认为是荒谬的,就像对英语读者说的那样,由于拉丁字母是从希腊字母发展而来的,对于希腊字母只有一个代码点就足够了。 α”和拉丁语“ a”,并让外观由使用的字体决定。(与“β” =“ b”,“γ” =“ g”等相同)
(请注意,如果是这种情况,我将无法在stackexchange上包括希腊字符。)
可能有更多的原因使我不记得了。
deceze的答案具有很强的真理性,但是还有一个原因仍要使用Shift-JIS和其他语言:UTF-8对于某些语言(主要是在CJK语言集中),效率极低。Shift-JIS是IIRC,是两字节宽的编码,而UTF-8在使用CJK等编码时通常为3字节,有时甚至为4字节。