1

当我从某个网站获取数据时,有时数据以 utf8 编码,但看起来像这样:

Thỏ , Nạt

重音符号与字符分开,而实际上这些字符串必须是:

Thỏ, Nạt

我不知道这里有什么问题以及如何纠正它。有人可以帮我弄这个吗

4

1 回答 1

3

第一个示例字符串包含两个分解形式的越南语字符。其中第一个是“ỏ”,由简单的字母“o”组成,后跟 U+0309 COMBINING HOOK ABOVE。

第二个示例字符串具有预先组合形式的这些字符。其中第一个是“ỏ” U+1ECF 拉丁文小写字母 O,上面带有钩子。

分解和预分解的形式被定义为“规范等价物”,通常期望产生相同的渲染(尽管这并不总是发生)。但是,它们并不相同。在字符和字符串的编程比较中,它们非常不同。

大多数带有变音符号的拉丁字母,例如“é”和“ä”,仅以预先组合的形式使用,因为这是键盘驱动程序、在线键盘、字符选择实用程序等通常产生的。但是,越南语键盘驱动程序通常会在输入基本字符后输入一些变音符号,从而将变音符号作为组合字符产生,即字母(如“ỏ”)然后是分解形式。

在许多情况下推荐的处理此问题的一种方法是将您的字符串转换为规范化表格 C (NFC)。这会将这些字符放入预先组合的形式。但是请注意,转换为 NFC 也消除了其他一些区别(但如果文本仅为越南语且不包含特殊符号,则这无关紧要)。

为什么第一个示例字符串在逗号之前有一个空格字符仍然是个谜。

于 2013-04-24T05:22:53.553 回答