我需要获取字形的十六进制unicode代码点。
我正在做的事情大多数的时间是:
$hex = dechex(unpack('V', iconv('UTF-8', 'UCS-4LE', $glyph)[1]);
如果ut失败:
ȳ ȳ ȳ ȳ ȳ
所有这些都返回233但233只在第一个实例中正确。其他是不同的字形,呈现不同。
当涉及多个变音标记时似乎失败了,但有时候它会正确。
为什么会这样失败?
答案 0 :(得分:1)
因为组成文本的方式取决于组成它的软件,除非该软件提供保证,或者你指出normalize输入,你实际上无法做出假设。
即使在最简单的(第一个)示例中,输入也可以合理地由单个字形LATIN SMALL LETTER Y WITH MACRON'(U + 0233)或两个代码点组合LATIN SMALL LETTER Y(U + 0079)和组合MACRON(U + 0304)。在每种情况下,您会得到不同的结果,即使输入在视觉上和语义上是相同的(唯一的区别在于字节方式,这是一个实现细节)。