检测字符是简化还是繁体中文字符

时间:2011-01-06 20:28:48

标签: unicode cjk

我找到了这个question,这使我能够检查字符串是否包含中文字符。我不确定unicode范围是否正确但是它们似乎对日语和韩语都是假的,对中文来说是真的。

它不做的是判断这个角色是传统的还是简体中文。你怎么会发现这个?


更新

  

问:如果这是一个中文,韩文或日文字符,我如何识别Unicode字符的32位值?

http://unicode.org/faq/han_cjk.html

他们认为角色无论形状如何都具有相同的含义,因此应该用相同的代码来表示。嗯,这对我来说没有意义,因为我正在分析与他们的解决方案无关的个别角色:

  

一个更好的解决方案是整个文本:如果有相当数量的假名,它可能是日语,如果有相当数量的韩语,它可能是韩语。

3 个答案:

答案 0 :(得分:5)

如前所述,您无法从单个字符可靠地检测脚本样式,但可以使用足够长的文本样本。有关执行此任务的Ruby gem,请参阅https://github.com/jpatokal/script_detector,以及Simplified Chinese Unicode table进行一般性讨论。

答案 1 :(得分:2)

正如我认为你发现的那样,你不能。简化和传统只是编写相同字符的两种风格 - 就像欧洲语言的罗马字体和哥特字体之间的区别。

答案 2 :(得分:1)

某些字符是可能的。繁体和简体字符集重叠,因此您基本上有三组字符:

  1. 仅传统的字符。
  2. 仅简化的字符。
  3. 未受影响的字符,两者均可用。
  4. 以角色面为例。它属于#2和#3 ......作为简化字符,它代表,面和面。而面只是一个传统的角色。所以在Unihan数据库中,face有一个kSimplifiedVariant,它指向。所以你可以推断它只是一个传统的角色。

    也有一个kTraditionalVariant,指向。这是系统中断的地方:如果你使用这些数据来扣除面只是一个简化的字符,你就错了......

    另一方面,有一个kTraditionalVariant,指向,这两个是“真正的”简化/传统对。但是,Unihan数据库中没有任何内容可以区分像韩/韩这样的案例,例如面/面。