在UTF8中可以有一个unicode连字符fi
(Unicode U + FB01)多个表示吗?哪一个?对于每种规范化形式?
答案 0 :(得分:2)
该字符应0xEF 0xAC 0x81
utf-8
f
,但相同的字符可以按顺序分解为i
和0x66 0x69
,它们一起{ {1}}。您的问题实际上是由be encoded as直接回答的:
正如您所看到的,NFD
和NFC
规范化仍然使用相同的连字符代码点,而NFKD
和NFKC
表单使用{{1} } + f
组合。
答案 1 :(得分:2)
这取决于“性格”的含义,这是相当模糊的。在Unicode中,“字符”通常表示分配给字符的代码点,这确实与“字符”的直观概念完全匹配。
单个代码点(例如U + FB01)只有一个UTF-8表示形式,因为UTF-8定义了一个用于生成编码形式的明确算法。
直观字符(例如连字符)可以具有不同的表示形式作为代码点或代码点序列,每个代码点具有UTF-8表示。 Unicode规范化规则部分地定义了这些替代方案之间的映射。
但是U + FB01的兼容性映射(到U + 0066 U + 0069,即“f”后跟“i”)并不保留直观字符的标识:连字被映射到两个普通字母。 / p>
另一方面,您可以通过在两个字母之间插入U + 200D ZERO WIDTH JOINER(ZWJ)来询问或建议结扎行为,例如“f”和“i”。在某种意义上,序列U + 0066 U + 200D U + 0069是fi连字的另一种表示,但这不是字符的形式属性,它依赖于渲染软件是否关注ZWJ。