当我从某个网站获取数据时,有时数据在utf8中编码,但看起来像这样:
Thỏ , Nạt
重音符号与字符分开,实际上这些字符串必须是:
Thỏ, Nạt
我不知道这里有什么问题以及如何纠正它。有人可以帮助我吗
答案 0 :(得分:3)
第一个示例字符串包含两个分解形式的越南字符。它们中的第一个是“ỏ”,由简单的字母“o”和U + 0309组合钩子组成。
第二个示例字符串包含预先组合形式的字符。第一个是“ỏ”U + 1ECF拉丁文小写字母O以上。
分解和预先组合的形式被定义为“规范等价物”,并且通常期望导致相同的渲染(尽管这并不总是发生)。然而,它们并不完全相同;在字符和字符串的程序化比较中,它们是非常不同的。
大多数带有变音符号的拉丁字母,例如“é”和“ä”,仅以预组合形式使用,因为这是键盘驱动程序,在线键盘,字符拾取实用程序等通常产生的。然而,越南键盘驱动程序经常工作,以便在输入基本字符后输入一些变音符号,因此变音符号作为组合字符产生,即字母(如“ỏ”)则以分解形式出现。
在许多情况下推荐的解决此问题的一种方法是将字符串转换为规范化格式C(NFC)。这会将这些字符放入预先组合的形式中。但请注意,转换为NFC也会删除其他一些区别(但如果文本仅使用越南语且不包含特殊符号,则无关紧要。)
为什么第一个示例字符串在逗号之前有空格字符仍然是个谜。