php中utf8是什么意思,php – 什么是标准化UTF-8关于?

所有你从来不想知道的Unicode规范化

规范归一化

Unicode包括多种方式来编码一些字符,最显着的是重音字符。规范归一化将代码点更改为规范编码形式。生成的代码点应该看起来与原来的相同,除了字体或渲染引擎中的任何错误。

何时使用

因为结果看起来相同,所以在存储或显示字符串之前,对字符串应用规范的规范化是始终安全的,只要您可以容忍结果不与位一致。

规范归一化有2种形式:NFD和NFC。这两者在某种意义上是等同的,即可以在这两种形式之间进行转换而没有损失。在NFC下比较两个字符串总是给出与在NFD下比较它们相同的结果。

NFD

NFD有字符完全展开。这是更快的归一化形式计算,但结果在更多的代码点(即使用更多的空间)。

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

NFC

NFC在运行NFD算法之后尽可能重新组合代码点。这需要一些时间,但导致更短的字符串。

兼容性规范化

Unicode还包括许多真正不属于但在遗留字符集中使用的字符。 Unicode添加了这些字符集,以允许这些字符集中的文本被处理为Unicode,然后进行转换而不会丢失。

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

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

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

何时使用

Unicode Consortium建议考虑像ToUpperCase变换这样的兼容性标准化。它在某些情况下可能是有用的,但你不应该只是应用它。

一个很好的用例是搜索引擎,因为你可能想要搜索9匹配⑨。

你可能不应该做的一件事是显示应用兼容性规范化的结果给用户。

NFKC / NFKD

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

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

结论

如果有疑问,去经典规范化。根据适用的空间/速度折衷选择NFC或NFD,或根据您正在互操作的事物需要什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值