Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unicode 任何人都可以解释这句话;“同样的事情”;UTF-8的发行?_Unicode_Utf 8 - Fatal编程技术网

Unicode 任何人都可以解释这句话;“同样的事情”;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:“相同的东西”(尽用户所能) tell)可以由几个不同的字符序列表示。对于 例如,带有锐重音的e可以用预合成的 U+00E9 E锐字符或由正则等价序列 U+0065U+0301(E+合并急性)。即使UTF-8提供了 单字节序列为每个字符序列,存在 “同一事物”的多个字符序列可能具有安全性 字符串匹配、索引、


这是我以前从未解决过的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中,