问题
问题很简单:我有包含这个值的 XML
穆勒
这似乎是用变音符号表示 u
的有效 XML 格式,就像这样。
穆勒
但是到目前为止,我们尝试过的所有解析器都会生成 u¨
—— 两个不同的字符。
背景
这种形式的 unicode (UTF-8) 使用两个代码点来表示单个字符;称为 Normalized Form Decomposed 或 NFD,二进制形式为 \303\274
。
大多数字符也可以表示为单个代码点和实体,包括这种情况。 XML 还可以包含 ü
或 ü
或 ü
并且在二进制中是 \195\188
。这称为归一化形式组合。这些中的任何一个都可以正常工作。
正确回答问题
所以我认为问题是:
- 是否有一个解析器(似乎不是 nokogiri)可以检测并规范化为我们喜欢的形式?
- 是否有合理的方法让我们可靠地检测 NFD 形式的实体并将它们转换为 NFC 形式(或者有什么东西可以做到这一点?)
谢谢!
最佳答案
您使用的字符 U+00A8 (DIAERESIS
) 不是组合字符 – 它不同于 U+0308 (COMBINING DIAERESIS
)。 (这是我自己才发现的,不知道非组合分音符有什么用)。
在这种情况下,这种行为看起来是正确的,而您的 XML 是错误的(它应该使用 ̈
而不是 ¨
)。
关于 ruby 2 : Recognizing decomposed utf8 in XML entities (NFD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313185/