这是我对Unicode的描述。请更正并发表评论。
Unicode将字符的表示与存储字符的机制分开。这与ANSI不同,其中每个字符由一个字节表示。
ANSI代码页将字符映射到字节表示。 Unicode将字符映射到代码点。代码点是一个抽象概念。编码方案的责任是以字节为单位表示Unicode代码点。
有许多Unicode编码方案。某些编码方案使用固定数量的字节来表示Unicode代码点。此方法必须平衡编码可以表示的代码点数量和所需的存储空间量。其他编码方案使用可变数量的字节来表示Unicode代码点。这种方法使数据的解析变得复杂,但它们避免了固定字节长度编码所遭受的“表示范围”/“存储空间”约束。
UTF-8是最常见的Unicode编码。 UTF-8的流行是因为它与ASCII兼容。 ASCII是ANSI的子集,包含英文字母,数字和常用标点符号。 UTF-8是一种可变长度编码,能够编码所有Unicode代码点。
答案 0 :(得分:4)
答案 1 :(得分:0)
这听起来很准确。您可能希望添加UTF-8通常用于存储文本文档,并且通常用于通过线路传输文本,因为它是紧凑的,而UTF-16也很常见,因为Java和.NET String类使用UTF-16因为它很有效率。
答案 2 :(得分:0)
几个更好的要点:ASCII兼容性不是唯一(甚至主要)UTF-8-AFAIK流行的原因,一种非常流行的ASCII兼容性副作用是转换为UTF-8的ASCII字符串的字节大小将相同。换句话说,当编写具有很少或没有非ASCII字符的文本时,您将获得ASCII的所有好处,并且对于非ASCII字符只有几个字节。此外,我相信所有官方Unicode编码都能够代表所有Unicode代码点。
答案 3 :(得分:0)
如果我是你,我会删除对ANSI的引用。在字符集和编码的上下文中,“ANSI”通常是指您正在处理的任何(Windows)系统的默认代码页。这通常意味着Microsoft的现有标准的扩展或更改版本之一,如windows-1252
而不是ISO-8859-1
。具有讽刺意味的是,这些扩展不受到ANSI的祝福。术语“ANSI”的这种用法是由Microsoft创造的,通常可以在记事本等Microsoft应用程序中的“另存为”对话框的编码选择部分中找到。在那里,您通常会找到一个名为“Unicode”的选项,它实际上意味着UTF-16(little-endian,没有BOM)。
因此,如果您真的想要了解Unicode,那么您应该首先抛弃您在Windows软件(或模拟Windows软件的第三方软件)中看到它所学到或推断的任何内容。实际上,抛弃你到目前为止已经了解的所有并从头开始。这是一个复杂的主题,与任何复杂的主题一样,你会发现更多关于它的不良信息而不是好的。
答案 4 :(得分:0)
UTF-8仅在西半球很受欢迎。始终需要多字节编码的语言从使用UTF-16甚至UTF-32获得更多。
干杯,