我找到了这个question,这使我能够检查字符串是否包含中文字符。我不确定unicode范围是否正确但是它们似乎对日语和韩语都是假的,对中文来说是真的。
它不做的是判断这个角色是传统的还是简体中文。你怎么会发现这个?
问:如果这是一个中文,韩文或日文字符,我如何识别Unicode字符的32位值?
http://unicode.org/faq/han_cjk.html
他们认为角色无论形状如何都具有相同的含义,因此应该用相同的代码来表示。嗯,这对我来说没有意义,因为我正在分析与他们的解决方案无关的个别角色:
一个更好的解决方案是整个文本:如果有相当数量的假名,它可能是日语,如果有相当数量的韩语,它可能是韩语。
答案 0 :(得分:5)
如前所述,您无法从单个字符可靠地检测脚本样式,但可以使用足够长的文本样本。有关执行此任务的Ruby gem,请参阅https://github.com/jpatokal/script_detector,以及Simplified Chinese Unicode table进行一般性讨论。
答案 1 :(得分:2)
正如我认为你发现的那样,你不能。简化和传统只是编写相同字符的两种风格 - 就像欧洲语言的罗马字体和哥特字体之间的区别。
答案 2 :(得分:1)
某些字符是可能的。繁体和简体字符集重叠,因此您基本上有三组字符:
以角色面为例。它属于#2和#3 ......作为简化字符,它代表面和麵,面和面。而面只是一个传统的角色。所以在Unihan数据库中,face有一个kSimplifiedVariant
,它指向面。所以你可以推断它只是一个传统的角色。
但面也有一个kTraditionalVariant
,指向麵。这是系统中断的地方:如果你使用这些数据来扣除面只是一个简化的字符,你就错了......
另一方面,韩有一个kTraditionalVariant
,指向韓,这两个是“真正的”简化/传统对。但是,Unihan数据库中没有任何内容可以区分像韩/韩这样的案例,例如面/面。