Unicode 任何人都可以解释这句话;“同样的事情”;UTF-8的发行?
引自: 安全性也可能受到多个字符特征的影响 编码,包括UTF-8:“相同的东西”(尽用户所能) tell)可以由几个不同的字符序列表示。对于 例如,带有锐重音的e可以用预合成的 U+00E9 E锐字符或由正则等价序列 U+0065U+0301(E+合并急性)。即使UTF-8提供了 单字节序列为每个字符序列,存在 “同一事物”的多个字符序列可能具有安全性 字符串匹配、索引、Unicode 任何人都可以解释这句话;“同样的事情”;UTF-8的发行?,unicode,utf-8,Unicode,Utf 8,引自: 安全性也可能受到多个字符特征的影响 编码,包括UTF-8:“相同的东西”(尽用户所能) tell)可以由几个不同的字符序列表示。对于 例如,带有锐重音的e可以用预合成的 U+00E9 E锐字符或由正则等价序列 U+0065U+0301(E+合并急性)。即使UTF-8提供了 单字节序列为每个字符序列,存在 “同一事物”的多个字符序列可能具有安全性 字符串匹配、索引、 这是我以前从未解决过的UTF-8的隐藏特性吗?这个问题实际上根本不是UTF-8特有的。所有可以表示所有(或至少大多数)Uni
这是我以前从未解决过的UTF-8的隐藏特性吗?这个问题实际上根本不是UTF-8特有的。所有可以表示所有(或至少大多数)Unicode码点的编码都会出现这种情况 Unicode的总体思想是不提供所谓的(例如),而是通常喜欢提供基本字符(例如)和组合字符(例如)。这样做的优点是不必提供每种可能的组合作为其自身的特征 注:。这是引用Unicode字符的独立于编码的方式 然而,当Unicode最初被设计时,一个重要的目标是为现有的、广泛使用的编码提供往返兼容性,因此包括了一些预先组合的字符(事实上,大部分来自拉丁语和相关字母的变音字符都包括在内) 因此是的(和tl;dr):在一个能够正确工作的Unicode应用程序中,U+00E9应该以与U+0065相同的方式呈现,并以与U+0301相同的方式处理 有一个称为的非平凡过程,它通过将给定字符串减少为四种标准形式之一来帮助处理这些差异
例如,在使用NFC时传递两个字符串(
U+00E9
和U+0065U+0301
)将导致U+00E9
,在使用NFD时将导致U+0065U+0301
。这个问题实际上根本不是UTF-8特有的。所有可以表示所有(或至少大多数)Unicode码点的编码都会出现这种情况
Unicode的总体思想是不提供所谓的(例如),而是通常喜欢提供基本字符(例如)和组合字符(例如)。这样做的优点是不必提供每种可能的组合作为其自身的特征
注:。这是引用Unicode字符的独立于编码的方式
然而,当Unicode最初被设计时,一个重要的目标是为现有的、广泛使用的编码提供往返兼容性,因此包括了一些预先组合的字符(事实上,大部分来自拉丁语和相关字母的变音字符都包括在内)
因此是的(和tl;dr):在一个能够正确工作的Unicode应用程序中,U+00E9应该以与U+0065相同的方式呈现,并以与U+0301相同的方式处理
有一个称为的非平凡过程,它通过将给定字符串减少为四种标准形式之一来帮助处理这些差异
例如,在使用NFC时传递两个字符串(U+00E9
和U+0065U+0301
)将导致U+00E9
,在使用NFD时将导致U+0065U+0301
实际上,我不明白这是什么意思:
“即使UTF-8为每个字符提供单字节序列
序列[…]”
引文想说的是:
“任何给定的Unicode码点序列都通过UTF-8编码映射到一个(准确地说是一个)字节序列。”也就是说,UTF-8是(抽象)Unicode码点序列和字节序列之间的双射
本文要说明的问题是,“文本字母”(通常理解)和Unicode代码点之间没有双射,因为同一文本可以由不同的Unicode代码点序列表示(如示例中所述)
实际上,这与UTF-8无关;这是Unicode的一个基本属性:许多文本都有多个表示形式作为Unicode代码点。在比较以Unicode表示的文本时(无论采用何种编码),这一点很重要
对此的一个(部分)解决方案是。它为Unicode文本定义了各种范式,这些范式是文本的唯一表示形式
实际上,我不明白这是什么意思:
“即使UTF-8为每个字符提供单字节序列
序列[…]”
引文想说的是:
“任何给定的Unicode码点序列都通过UTF-8编码映射到一个(准确地说是一个)字节序列。”也就是说,UTF-8是(抽象)Unicode码点序列和字节序列之间的双射
本文要说明的问题是,“文本字母”(通常理解)和Unicode代码点之间没有双射,因为同一文本可以由不同的Unicode代码点序列表示(如示例中所述)
实际上,这与UTF-8无关;这是Unicode的一个基本属性:许多文本都有多个表示形式作为Unicode代码点。在比较以Unicode表示的文本时(无论采用何种编码),这一点很重要
对此的一个(部分)解决方案是。它为Unicode文本定义了各种标准格式,这些格式是文本的唯一表示形式。非常简短和可视化的示例:字符“é”可以使用Unicode代码点U+00E9(带锐音符的拉丁文小写字母E,
é
)或U+0065(拉丁文小写字母E,E
)后跟U+0301来表示(结合了尖锐的重音,'
),它们看起来是这样的:é
在UTF-8中,