2011-10-24 110 views
2

我还没有找到有关何时使用Unicode的详细信息(简明)。我知道很多人说最好的做法是始终使用Unicode。但是Unicode字符串DO有更多的内存占用。我是正确地说,Unicode的必须使用何时使用Unicode(除非使用unicode!)

  • 打印东西的屏幕比其他地方(例如调试)使用。
  • 一般来说,两端在不同的语言环境是发送任何类型的文本在网络/国家
  • 当你不知道用哪个

我想如果有人解释说这将是有益的的究竟使用Unicode发生......基本(简洁)我是正确的说,当事情变得一团糟:

  • 物理(字节)字符串被使用字符串的表示(发送到设备代码页,其他... th已经是细节虽然有趣)与发件人不同。

上下文在编程语言(比如C++)中使用Unicode,但我希望这个问题的答案可以用于任何编码情况。
另外,我知道Unicode和NLS不是一回事,但说NLS暗示Unicode的用法是否正确?

P.S.真棒网站

回答

5

总是使用Unicode,它会为您和其他人节省很多痛苦。

你可能会困惑的是编码问题。 Unicode字符串不需要需要比等效的ASCII(或其他编码)字符串更多的内存,这取决于所使用的编码。

有时候“Unicode”被用作“UCS-2”或“UTF-16”的同义词。严格地说,使用是错误,因为“Unicode”是定义字符集及其unicode码点的标准。它的确如而不是定义了对字节(或字)的映射。 UTF-16,UTF-8和其他编码接管将字符映射到具体字节的工作。

+1

关于不需要更多空间用于编码为UTF-8的ASCII字符串,这是大多数Unicode文本如何传输或存储在磁盘上的绝对正确。 – andrewmu

+0

@Joachim Sauer:所以如果我在数据库中使用unicode支持的数据类型,它们不会比普通字符串占用更多空间吗?我问了一个类似这个问题这里http://stackoverflow.com/questions/7860643/to-use-unicode-or-not-in-web-development-project-using-flask-and-sqlalchemy – codecool

+0

@ codecool:这取决于你的数据库使用什么编码。如果它使用UTF-8,那么它*不会需要更多空间用于可以用ASCII表示的文本(即大多数英文文本)。 –

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

+1尤其适用于obLink。 – tripleee

1

我有一个小实用程序,它有时有助于查看字符编码之间的区别。 http://sodved.awardspace.info/unicode.pl。如果您将ö粘贴到​​字段中,您将看到它由不同编码中的不同字节序列表示。正如其他两个很好的答案所描述的,一些非Unicode编码根本无法表示它。

+0

看上去不错,但不能从办公室不幸检查: 趋势科技防毒墙网络事件 \t \t URL阻止 \t 您试图访问的URL是一个潜在的安全风险。趋势科技防毒墙网络版已根据网络安全策略阻止此URL。 网址:\t http://sodved.awardspace.info/unicode.pl 风险级别:\t危险 详情:\t验证为欺诈页面或威胁源 – Kharski

+0

Awardspace仅仅是一个免费的托管网站。猜猜其他人过去曾在那里做过那些可怕的东西 – Sodved