ruby 2 : Recognizing decomposed utf8 in XML entities (NFD)

标签 ruby xml utf-8

问题

问题很简单:我有包含这个值的 XML

穆勒

这似乎是用变音符号表示 u 的有效 XML 格式,就像这样。

穆勒

但是到目前为止,我们尝试过的所有解析器都会生成 —— 两个不同的字符。

背景

这种形式的 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/

相关文章:

mysql 在使用 "like"时返回错误结果

ios - 获取以字节为单位的UTF-8字符串长度的最佳方法?

ruby-on-rails - 如何在 ruby​​ 中将 XML 转换为哈希?

ruby-on-rails - rails 协会 :autosave doesn't seem to working as expected

ruby-on-rails - 服务器发送的事件和 Rails Streaming

ruby - 如何呈现正确的 JSON 格式并引发错误

python - xml 元素的文本未重新分配给新值

java - fragment 无法转换为上下文

c++ - 为什么正则表达式在 C++ 的日语字符串中找不到 "("?

ruby-on-rails - has_many :through 的附加范围条件