【发布时间】:2020-06-17 15:03:37
【问题描述】:
Unicode 对粗体或斜体字符有单独的字符,例如U+1D43B 是斜体 H。有关这些列表,请参阅 https://unicode-search.net/unicode-namesearch.pl?term=mathematical。
当用户从电子教科书中复制化学式时,他们实际上可能是在复制这些字符而不是 Latin-1 字符,因此他们复制的是“U+1D43B U+2082 U+1D442”而不是“H2O” .当他们将其粘贴到搜索表单中时,它看起来像 H2O。但他们不会得到任何结果,因为它不是拉丁字符。
所以,我需要将这些字符翻译成 Perl 中的 Latin-1 字符。 Text::Unidecode 库似乎无法识别这些。
我尝试使用音译,
y/\x{1d434}-\x{1d467}/A-Za-z/
但这似乎根本不起作用。
有没有办法在 unicode 字符范围内使用翻译运算符?或者有没有图书馆可以做到这一点?
【问题讨论】:
-
不,不,不。粗体和斜体没有特殊字符,这在 Unicode 原则中明确定义。
MATHEMATICAL ITALIC H具有特定语义,不应用于 H2O。顺便说一句,您应该检查/google NFKC 或 NFKD(Unicode 兼容规范化),它们应该将这个(可能还有下标 2 等)转换为 normal 字符。 -
我同意不应该那样使用它。但其他人是,这正在影响用户。
-
无论如何,对于搜索,您应该规范化文本(这不是您可能得到的唯一惊喜)。 perldoc.perl.org/Unicode/Normalize.html