考虑:

unicode=utf16是真的吗?

很多人说Unicode是一种标准,而不是一种编码,但实际上大多数编辑器都支持另存为Unicode编码。


当前回答

实际上,大多数编辑器都支持另存为“Unicode”编码。

这是Windows的一个不幸的错误命名。

因为Windows内部使用UTF-16LE编码作为Unicode字符串的内存存储格式,它认为这是Unicode文本的自然编码。在Windows世界中,有ANSI字符串(当前机器上的系统代码页,受限于完全不可移植性)和Unicode字符串(在内部存储为UTF-16LE)。

这些都是在Unicode的早期设计的,在我们意识到UCS-2是不够的,在UTF-8被发明之前。这就是为什么Windows对UTF-8的支持在各方面都很差。

这个错误的命名方案成为用户界面的一部分。使用Windows编码支持来提供一系列编码的文本编辑器会自动且不恰当地将UTF-16LE描述为“Unicode”,而将UTF-16BE(如果提供的话)描述为“Unicode大端典”。

(其他自己进行编码的编辑器,如notepad++,就没有这个问题。)

' ANSI '字符串也不是基于任何ANSI标准,如果这让你感觉更好的话。

其他回答

除了Trufa的注释之外,Unicode还明确不是UTF-16。当他们第一次研究Unicode时,人们推测16位整数可能足以存储任何代码,但实际上并非如此。然而,UTF-16是Unicode的另一种有效编码(除了8位和32位变体),我相信这是微软在nt派生操作系统运行时在内存中使用的编码。

事情没那么简单。

UTF-16是一种16位可变宽度编码。简单地称某种东西为“Unicode”是有歧义的,因为“Unicode”指的是一整套字符编码标准。Unicode不是编码!

http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set

当然,还有强制性的Joel On Software -每个软件开发人员绝对必须了解Unicode和字符集(没有借口!)的绝对最小值链接。

这很奇怪。Unicode是一种标准,而不是编码。由于可以指定字节顺序,我猜它实际上是UTF-16或32。

这个菜单是从哪里提供的?

实际上,大多数编辑器都支持另存为“Unicode”编码。

这是Windows的一个不幸的错误命名。

因为Windows内部使用UTF-16LE编码作为Unicode字符串的内存存储格式,它认为这是Unicode文本的自然编码。在Windows世界中,有ANSI字符串(当前机器上的系统代码页,受限于完全不可移植性)和Unicode字符串(在内部存储为UTF-16LE)。

这些都是在Unicode的早期设计的,在我们意识到UCS-2是不够的,在UTF-8被发明之前。这就是为什么Windows对UTF-8的支持在各方面都很差。

这个错误的命名方案成为用户界面的一部分。使用Windows编码支持来提供一系列编码的文本编辑器会自动且不恰当地将UTF-16LE描述为“Unicode”,而将UTF-16BE(如果提供的话)描述为“Unicode大端典”。

(其他自己进行编码的编辑器,如notepad++,就没有这个问题。)

' ANSI '字符串也不是基于任何ANSI标准,如果这让你感觉更好的话。

正如Rasmus在他的文章《UTF-8和Unicode的区别?》:

If asked the question, "What is the difference between UTF-8 and Unicode?", would you confidently reply with a short and precise answer? In these days of internationalization all developers should be able to do that. I suspect many of us do not understand these concepts as well as we should. If you feel you belong to this group, you should read this ultra short introduction to character sets and encodings. Actually, comparing UTF-8 and Unicode is like comparing apples and oranges: UTF-8 is an encoding - Unicode is a character set A character set is a list of characters with unique numbers (these numbers are sometimes referred to as "code points"). For example, in the Unicode character set, the number for A is 41. An encoding on the other hand, is an algorithm that translates a list of numbers to binary so it can be stored on disk. For example UTF-8 would translate the number sequence 1, 2, 3, 4 like this: 00000001 00000010 00000011 00000100 Our data is now translated into binary and can now be saved to disk. All together now Say an application reads the following from the disk: 1101000 1100101 1101100 1101100 1101111 The app knows this data represent a Unicode string encoded with UTF-8 and must show this as text to the user. First step, is to convert the binary data to numbers. The app uses the UTF-8 algorithm to decode the data. In this case, the decoder returns this: 104 101 108 108 111 Since the app knows this is a Unicode string, it can assume each number represents a character. We use the Unicode character set to translate each number to a corresponding character. The resulting string is "hello". Conclusion So when somebody asks you "What is the difference between UTF-8 and Unicode?", you can now confidently answer short and precise: UTF-8 (Unicode Transformation Format) and Unicode cannot be compared. UTF-8 is an encoding used to translate numbers into binary data. Unicode is a character set used to translate characters into numbers.