关于unicode:检测字符是简体还是繁体中文

Detect if character is simplified or traditional Chinese character

我发现了这个问题,这使我能够检查字符串是否包含汉字。 我不确定unicode范围是否正确,但是对于日语和韩语,它们似乎返回false,对于中文,它们返回true。

它不会做的是告诉您该字符是繁体中文还是简体中文。 您将如何找到答案?


更新

Q: How can I recognize from the 32 bit value of a Unicode character if this is a Chinese, Korean or Japanese character?

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

他们认为字符不分形状的说法具有相同的含义,因此应使用相同的代码表示。 嗯,这对我来说不是没有意义的,因为我正在分析与他们的解决方案不兼容的单个字符:

A better solution is to look at the text as a whole: if there's a fair amount of kana, it's probably Japanese, and if there's a fair amount of hangul, it's probably Korean.


如前所述,您不能从单个字符中可靠地检测脚本样式,但是可能会有足够长的文本样本。请参阅https://github.com/jpatokal/script_detector以获取可完成此工作的Ruby gem,以及有关常规讨论的简体中文Unicode表。


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

  • 仅传统字符。
  • 仅简化的字符。
  • 保持不变的字符,并且在这两种字符中都可用。
  • 以字符面为例。它同时属于#2和#3 ...作为简化字符,它代表面和面,面和面条。而面仅是传统字符。因此,在Unihan数据库中,面有一个kSimplifiedVariant,它指向面。因此,您可以推断出它只是一个传统字符。

    但是面也有一个kTraditionalVariant,它指向面。这就是系统中断的地方:如果您使用此数据来推导面仅是简化字符,那您就错了...

    另一方面,韩文具有kTraditionalVariant,指向韩文,并且这两个是"真实的"简体/繁体对。但是,Unihan数据库中没有任何东西可以将韩/韩之类的情况与面/面之类的情况区分开。


    正如我认为您已经发现的那样,您做不到。简体和繁体只是两种书写同一字符的样式-就像欧洲语言的罗马文字和哥特文字之间的区别。