当前位置: 首页 > 面试题库 >

什么是标准化的UTF-8?

徐丰茂
2023-03-14
问题内容

在ICU项目(也现在有一个PHP库)中包含有需要帮助恢复正常UTF-8串类,使搜索时更容易地比较值。

但是,我试图弄清楚这对应用程序意味着什么。例如,在哪种情况下,我想要“规范对等”而不是“兼容性对等”,反之亦然?


问题答案:

规范化归一化

Unicode包括多种编码某些字符(最著名的是重音字符)的方法。规范化规范将代码点更改为规范编码形式。生成的代码点应与原始代码点相同,除非字体或渲染引擎中有任何错误。

何时使用

因为结果看起来相同,所以在存储或显示字符串之前对字符串进行规范化的标准化始终是安全的,只要您可以容忍结果与输入不尽相同即可。

规范化归纳有两种形式:NFD和NFC。从一个人可以在这两种形式之间进行转换而不会造成损失的意义上来说,两者是等效的。在NFC下比较两个字符串将始终得到与在NFD下比较两个字符串相同的结果。

无损检测

NFD的字符已完全扩展。这是计算速度更快的规范化形式,但是会导致更多的代码点(即,使用更多的空间)。

如果只想比较尚未标准化的两个字符串,这是首选的标准化形式,除非您知道需要兼容性标准化。

NFC

运行NFD算法后,NFC会在可能的情况下重组代码点。这会花费更长的时间,但会导致字符串更短。

兼容性归一化

Unicode还包括许多实际上不属于但在旧式字符集中使用的字符。Unicode添加了这些功能,以允许将这些字符集中的文本作为Unicode处理,然后无损地转换回去。

兼容性归一化将这些转换为相应的“真实”字符序列,并执行规范化归一化。兼容性归一化的结果可能与原始结果不一样。

包含格式信息的字符将被不包含格式信息的字符替换。例如,字符被转换为9。其他不涉及格式差异。例如,罗马数字字符转换为常规字母IX

显然,一旦执行了此转换,就不再可能无损地转换回原始字符集。

何时使用

Unicode联合会建议将兼容性规范化视为一种ToUpperCase转换。这在某些情况下可能有用,但您不应该随便使用它。

一个很好的用例是搜索引擎,因为您可能希望搜索9匹配

您可能不应该做的一件事是显示对用户应用兼容性标准化的结果。

NFKC / NFKD

兼容性规范化形式有两种形式:NFKD和NFKC。它们与NFD和C之间的关系相同。

NFKC中的任何字符串本质上也在NFC中,对于NFKD和NFD也是相同的。因此NFKD(x)=NFD(NFKC(x)),和NFKC(x)=NFC(NFKD(x))等。

结论

如有疑问,请进行规范化归一化处理。根据适用的空间/速度权衡,或根据互操作对象的要求选择NFC或NFD。



 类似资料:
  • 本文向大家介绍什么是数据标准化,为什么要进行数据标准化?相关面试题,主要包含被问及什么是数据标准化,为什么要进行数据标准化?时的应答技巧和注意事项,需要的朋友参考一下 数据标准化是预处理步骤,将数据标准化到一个特定的范围能够在反向传播中保证更好的收敛。一般来说,是将该值将去平均值后再除以标准差。如果不进行数据标准化,有些特征(值很大)将会对损失函数影响更大(就算这个特别大的特征只是改变了1%,但是

  • 我的问题是批处理规范化(BN)正在规范化什么。 我在问,BN是单独标准化每个像素的通道还是一起标准化所有像素的通道。它是在每张图像的基础上还是在整个批次的所有通道上进行的。 具体而言,BN在X上运行。比如说,。因此,当轴=3时,它在“c”维度上运行,即通道数(对于rgb)或特征图数。 因此,假设X是rgb,因此有3个通道。BN是否做到了以下几点:(这是BN的简化版本,用于讨论维度方面。我知道gam

  • 统计指标 释义 访问量(IP) 一天之内您网站的独立访问IP数 页面浏览量(PV) 即PageView值,用户每打开1个网站页面,记录1个PV 用户多次打开同一页面PV累计多次 独立访客数(UV) UV即UniqueVistor,独立访客数,指1天内访问某站点的人数,以cookie为依据 1天内同一访客的多次访问只计为1个访客;不同浏览器访问累计+1;一旦清除浏览器缓存,UV将会刷新 新访客(NE

  • 既然c 17有了< code>std::byte,我就在寻找一种方法,将读取文件到< code>char的代码转换成读取文件到< code>byte的代码。文件包含字节,而不是一堆整数。 然后我读了这个问题和另一个问题,人们认为把文件读入<code>字节</code>是错误的,把文件读进<code<char>是正确的。 如果< code>byte不是为了访问内存而设计的,那么它的目的是什么呢?正如

  • 问题内容: 在tensorflow 1.4中,我发现了两个执行批处理规范化的函数,它们看起来相同: (链接) (链接) 我应该使用哪个功能?哪一个更稳定? 问题答案: 只是添加到列表中,还有其他几种方法可以在tensorflow中进行批处理规范: 是低级操作。调用者负责自己处理和张量。 是另一个低级操作,类似于上一个操作。不同之处在于它针对4D输入张量进行了优化,这在卷积神经网络中很常见。接受任何

  • 问题内容: 我正在使用此下拉列表按UTC偏移量存储时区: 使用PHP,我实际上没有最简单的选项将它们转换为时区缩写,我唯一以编程方式进行选择的方法是对约400个时区缩写进行排序。有人知道每个时区是什么以及夏时制进行时它们是什么的下拉列表吗?(我假设我需要手动定义两个列表) 编辑:将每个时区的此列表解析为单个缩写,但是它们没有“受欢迎”的缩写。 我的新清单 Code: 问题答案: 什么是“标准”时区