问题描述
我正在尝试比较两个包含日语字符的spark数据帧,其中有些字符看起来与程序相同但实际上不同,例如プvsプ
如果将它们放在utf-8编码器中:
プutf-8 = \ xE3 \ x83 \ x97
プutf-8 = \ xE3 \ x83 \ x95 \ xE3 \ x82 \ x9A
看起来像フ(\ xE3 \ x83 \ x95)+小圆圈半语音符号(\ xE3 \ x83 \ x95)=プ
这些区别叫什么,在Java / Scala中有什么方法可以在它们之间转换?
谢谢。
解决方法
プ
又名\xE3\x83\x97
(UTF-8)是\u30d7
又名'KATAKANA LETTER PU' (U+30D7)。
プ
又名\xE3\x83\x95\xE3\x82\x9A
(UTF-8)是\u30d5\u309a
又名'KATAKANA LETTER HU' (U+30D5)和'COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK' (U+309A)。
如您所见,第二个字符是基本字符和组合字符。这类似于对拉丁字符(例如, ñ
= n
+ ̃
又名\u00f1
= \u006e
+ \u0303
。
您可以使用Normalizer
类在两种形式之间进行转换。参见:javadoc。
另请参阅:The Java™ Tutorials - Normalizing Text。
另请参阅:Combining accent and character into one character in java 7