为什么没有人比使用UTF-8编码? [关闭](Why does anyone use an en

2019-07-31 01:26发布

我想知道为什么任何开发人员需要使用其他的编码不是UTF-8。

Answer 1:

维基百科列出相比,其他各种编码的优点和UTF-8的优缺点:

http://en.wikipedia.org/wiki/UTF-8#Advantages_and_disadvantages

最重要的缺点是恕我直言, 并非所有代码点都使测量更加困难,许多字符串操作,如搜索低效相同大小 UTF-8可能会使用显著更多的空间,尤其是在亚洲语言 ,如中国,日本或印地文和。



Answer 2:

那么,有些人是因为他们的工具是陈旧的或有缺陷的。 有些人是因为他们不认为有必要支持ASCII以外任何东西。 有些人是因为他们不知道任何好转。

这些都是不使用Unicode通常的借口。

作为不使用UTF-8特异性有不同的原因。 一些系统,如Windows 1(并从词干,.NET)和Java来在一个时间,Unicode的是严格的16位代码。 因此,存在实际上只有一个编码:UCS-2,编码代码点直接作为16位的字。

后来统一扩大到21位,因为65536个代码点是不够的了。 这引起了编码如UTF-32和UTF-16的出现。 对于先前与UCS-2转换为UTF-16的工作系统是最简单,最明智的选择。 窗户没有在Windows 2000中的叶奥尔德天过渡回来。

所以,尽管我认为,几乎所有的应用程序现在应该支持Unicode,我不认为这是完全必要为他们专门使用UTF-8。 有对于历史的原因,并从UTF-16转换现有系统为UTF-8没有真正的好处。


1 NT。



Answer 3:

在UTF-8之间的代码点0800FFFF占用三个字节以UTF-8但在UTF-16只有两个。 请参阅维基百科比较的更多细节,但基本上如果文本巨资在这一范围使用代码点(比方说,如果是中国人),UTF-8的文件会比UTF-16文件具有相同的内容大。



Answer 4:

UTF-8是在编码纯英文文本(同ASCII)很有效。 如果你的用户群可能是大部分,说中国人,你会好得多使用UTF-16。

欲了解更多信息,请参阅绝对最低每一个软件开发人员绝对,积极必须知道的关于Unicode和字符集 。



Answer 5:

有时他们是由于历史的/不支持的原因限制(我是在Linux机器上Samba共享使用Zend Studio的开发在Windows上:有什么东西在混合意味着我一直恢复到CP1512,而不是UTF8的)。

有时,在数据库中存储一个MD5哈希值,当你不需要使用UTF-8(例如:你只需要十六进制范围0-9 AF:为什么让一个UTF-8场,这将需要至少一个字节额外的存储空间,而不是正常的ASCII)。

有时,它只是懒惰学习UTF-8功能的特定语言。



Answer 6:

因为他们不知道更好。 唯一有效的批评为UTF-8是常见的亚洲语言编码与其他编码过大。 UTF-8是优越,因为

  • 这是ASCII兼容。 大多数已知的,并试图字符串操作不需要适应。
  • 它是Unicode。 凡是不统一甚至不应该在这个时代考虑。 如果您在编码X有重要的数据,花在谷歌两分钟,写一个转换功能。 即使你有sourceless遗留应用Z到界面,可以让你的逻辑停留在21世纪通过管道运行的通信。
  • UTF-16是不固定长度或者假设它像许多人,只会造成可怕的错误。
  • 此外Unicode是非常复杂的,它几乎是比适于从ASCII将即使在UTF-32产生坏的结果任何固定大小的算法确定的。

假设你有这样的UTF-16字符串。

[0][1][2][F|3] [4] [5]

而你要插入字符之间有8码[3] [4]你会做插入(5,8)

如果你不检查BMP之外的字符(如连续使用UTF-8,你可以不知道你有多少双字大小都有),你得到:

[0][1][2][F|8][3][4][5]

两个新的垃圾字符。 这么多的固定大小的编码。 你当然可以完全禁止这样的字符,但是当与现实世界的代码接口,你可能会发现你的程序将保存这个用户谁住在室射频配置文件/ .profile文件中,而不是[古典中国谚语] .profile文件。

或者只是不能写他对中国古典谚语论文与软件愤怒的用户。



Answer 7:

因为讲英语的世界之外,人们一直使用的是早Unicode和量身定制为各自的语言了几十年的各种编码。 这些特定语言的编码已成为根深蒂固无处不在,有相当多的标准。 如果您想与遗留系统接口的希望,你必须使用它们,因此,所有系统都支持他们,通常即使他们现在使用它们作为默认支持UTF-8也是如此。 甚至有可能是传统上用于不同目的的多个旧编码。

例子:

  • ISO-8859-1在西欧-实际上是过时的有作为,因为你需要ISO-8859-15的欧元符号
  • ISO-2022-JP日本的电子邮件, 移动JIS的网站
  • 中文在台湾
  • GB2312在中国

最后两个例子表明,编码,甚至可以是一个政治问题。



Answer 8:

一个正当的理由是,当你需要处理遗留文件,软件或硬件不兼容Unicode。

另一个合理的原因是,你需要使用一种编程语言/不支持UTF8 / Unicode的好...或根本库。

其他答案提的是UTF-16比UTF-8亚洲语言/文字更紧凑。

当然还有像短视,无知,懒惰...和最后期限的原因。



Answer 9:

它也值得记住的是,在某些情况下(这里需要一个非拉丁字符集),UTF-8实际上可以比臃肿的16位Unicode编码较大。 在这种情况下,UCS-2或UTF-16将是一个更好的选择。



Answer 10:

http://www.personal.psu.edu/ejp10/blogs/gotunicode/2007/02/cjk-unicode-angst-in-japan-and.html大约有难度日本用户必须使用Unicode一个很好的总结+链接。

http://www.hastingsresearch.com/net/04-unicode-limitations.shtml

显然,统一正在从统一离开由于此类投诉。



Answer 11:

使用非Unicode的8位字符集的原因/编码是某种和/或惯性的都回来了兼容性。 对于这个问题,最常见的原因为使用UTF-8是与像XML标准的任务,或者选择UTF-8的兼容性。

在你认为文本会占用不同的编码,特别是在存储字节数的差异,大多是理论上的。 在现实世界中的情况下,兼容的要求都更重要。 如果使用压缩,大小差异反正走。 即使不使用压缩,总的文字大小是很难预测和很少的决定性因素。

当转换所使用非Unicode 8位编码,使用UTF-16可以是用于确保所有的代码已被转换的工具,因为不匹配可以被捕获作为编译时类型错误遗留代码。 许多语言,运行时和库如JavaScript,JVM,.NET,ICU使用16位字符串和UTF-16,尽管存储和网络协议通常是8位。



Answer 12:

想象一下,所有的文件要考虑的是在GB2312(中国大陆标准)。 然后,你可以选择GB18030为Unicode编码来代替。 他们是兼容的相同的方式,所有的ASCII是UTF-8。 这是中国大陆有用!

您可能决定更快,当你发现了这两个提到的GB-标准在法律的IT产品要求(据我听说过),如果你想在中国船舶(大陆)。

另一个好处是,GB2312,这样GB18030为好,也ASCII兼容。

这是算法并不强劲,虽然。 - 所以,如果你有没有政治原因或任何GB2312的遗产,它是没有意义的使用它。 但是,如果你这样做,在这里你有你的答案。



Answer 13:

使用MySQL的时候,就好像它是不是很复杂相关的主题,你要使用哪种UTF-8整理的选择的选项。 所以,你会用什么?

UTF-8 general ciUTF-8 unicode ci

(I倾向于使用一个用于数据库连接的UTF-8变体)



Answer 14:

因为有时候你想轻松地对码点操作 - 那么你会选择FE UCS-2或UCS-4。



Answer 15:

许多API需要其他的Unicode编码 - 大部分的UTF-16。 例如,Java和.NET,Win32的。



Answer 16:

在我以前的雇主,我们使用ISO-8859-1我们的一些ASP页面,以配合我们的SQL Server,正如你可以猜测是不是Unicode的排序规则。 我想改变的整理,但经理说要等到我们提高我们的SQL Server来做到这一点。 不用说,它从来没有发生过 - 我还没有与他们一点点过去的一年中,所以我不知道他们是否终于做到了。



Answer 17:

Unicode的当然是在大多数情况下一个工作的好地方,但开发者应该熟悉许多不同类型的字符编码。 当然,如果该字符集是有限的可以使用ASCII。

如果你从不会发送UTF-8源的开发和接收数据? 可能有很多的接口问题,如果你不明白你的输入。

乔尔的文章上的必知道的字符编码是好的,值得一读。



文章来源: Why does anyone use an encoding other than UTF-8? [closed]