何时使用Unicode(与非Unicode一起!)

3
我没有找到太多关于何时精确使用Unicode的信息。我理解很多人说最佳实践是始终使用Unicode。但是,Unicode字符串确实具有更多的内存占用。我正确地说Unicode必须只在以下情况下使用吗?
  • 将某些内容打印到屏幕上,而不是本地(例如调试)使用。
  • 通常,在两个不同语言环境/国家之间发送任何类型的文本时使用。
  • 当你不确定该使用哪一个时。
如果有人解释一下Unicode的基础知识会更有益。我正确地说,当:
  • 物理(字节)字符串被发送到使用与发送方不同的字符串表示形式(代码页,其他……这已经是详细信息了,尽管有趣)的机器时,情况变得混乱。
相关情境是在编程语言(比如C++)中使用Unicode,但我希望对这个问题的回答适用于任何编码情况。
另外,我知道Unicode和NLS并不是相同的东西,但是否可以说NLS意味着使用Unicode?
P.S. 网站非常棒。
3个回答

5

始终使用Unicode,这将为您和他人节省很多痛苦。

您可能混淆了编码问题。Unicode字符串不一定比等效的ASCII(或其他编码)字符串占用更多内存,这在很大程度上取决于所使用的编码。

有时,“Unicode”被用作“UCS-2”或“UTF-16”的同义词。严格来说,这种用法是错误的,因为“Unicode”是定义字符集及其Unicode代码点的标准。它本身并没有定义字符到字节(或字)的映射。UTF-16、UTF-8和其他编码接管了将字符映射到具体字节的工作。


1
绝对正确,关于不需要更多的空间来编码为UTF-8的ASCII字符串,这是大多数Unicode文本在传输或存储时的方式。 - andrewmu
@Joachim Sauer:如果我在数据库中使用支持Unicode的数据类型,它们是否会比普通字符串占用更多的空间? 我在这里提出了一个类似于这个问题的问题http://stackoverflow.com/questions/7860643/to-use-unicode-or-not-in-web-development-project-using-flask-and-sqlalchemy - codecool
@codecool:这取决于您的数据库使用的编码方式。如果它使用UTF-8,则不需要为可以用ASCII表示的文本(即大多数英文文本)分配更多的空间。 - Joachim Sauer
@JoachimSauer mysql将UTF-8存储在足以存储该数量字符的最大大小的空间中;也就是说,它需要比ASCII或Latin-1多3或4倍的空间(utf8为3,utf8mb4为4)。 - prosfilaes

4
Unicode的优越性在于它使您摆脱限制和许多麻烦。Unicode是迄今为止最大的字符集,即它使您实际上可以编码和使用当今使用的任何半流行语言中的几乎任何字符。对于任何其他字符集,您需要考虑它是否可以实际编码字符。Latin-1不能编码字符“あ”,Shift-JIS不能编码字符“ڥ”等等。只有当您非常确定您永远不需要除基本拉丁字母/阿拉伯字母/日本/任何其他字符子集之外的任何内容时,您才应选择专用编码,例如Latin-1、BIG-5、Shift-JIS或ASCII。
Unicode是最通用的字符集,因此应遵循的良好标准。
Unicode编码没有什么特别之处,它们的位表示只是稍微复杂一些,因为它们必须编码更多的字符,同时还要尝试节省空间。有关此主题的非常详细的探讨,请参见What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

1

我有一个小工具,有时候可以帮助查看字符编码之间的差异。http://sodved.awardspace.info/unicode.pl。如果你将ö粘贴到原始(UTF-8)字段中,你会发现它在不同的编码中被表示为不同的字节序列。正如其他两个很好的答案所描述的那样,一些非Unicode编码根本无法表示它。


看起来不错,但很遗憾无法从办公室检查: 趋势科技 OfficeScan 事件URL 被阻止您正在尝试访问的 URL 是潜在的安全风险。为了保持网络安全策略,趋势科技 OfficeScan 已经阻止了此 URL。 URL:http://sodved.awardspace.info/unicode.pl 风险级别:危险 详细信息:已验证欺诈页面或威胁来源 - Kharski
Awardspace只是一个免费的托管网站。猜想过去可能有其他人在那里做了一些不良行为。 - Sodved

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