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.
-
代码页有助于区分吗?至少在微软世界中,简体中文似乎是CP 936,而繁体中文是CP 950。对于MS和IBM代码页,也许从i18nguy.com/unicode/codepages.html开始。
-
我在Google上进行了快速搜索,发现了这个unicode.org/faq/han_cjk.html。我发现了一些有趣的问题,他们在那里也讨论了传统字符。希望能帮助到你!
-
阴影链接的常见问题解答似乎完全可以回答您的问题。如链接说明中的示例,您如何确定"聊天"是英语还是法语?如果您不认为自己的答案在那里,则可能需要扩展一下您的问题。
-
这是一个很好的链接,我之前已经知道过。啊挺复杂的。聊天/聊天en / fn的拼字法肯定会使它难以区分;但是,如果我们使用IPA编写聊天/聊天[?/ t?t],则可以通过音节构造来实现,因为它是基于声音的,而不是基于古老的拼字法。
-
但是汉语并没有那么复杂,因为说/说[t / s shuo1说话]是完全不同的字符,一个是传统的等效语音,另一个是简化的等效语音。它们具有与a / a en / fn相对的不同unicode值,它们共享相同的字符代码。
-
但是,也有很多字符(例如口)用在简体中文和繁体中文中,尝试确定"是哪个"与尝试确定"聊天"是英语还是法语是相同的。
如前所述,您不能从单个字符中可靠地检测脚本样式,但是可能会有足够长的文本样本。请参阅https://github.com/jpatokal/script_detector以获取可完成此工作的Ruby gem,以及有关常规讨论的简体中文Unicode表。
某些字符是可能的。传统字符集和简化字符集重叠,因此您基本上拥有三组字符:
仅传统字符。
仅简化的字符。
保持不变的字符,并且在这两种字符中都可用。
以字符面为例。它同时属于#2和#3 ...作为简化字符,它代表面和面,面和面条。而面仅是传统字符。因此,在Unihan数据库中,面有一个kSimplifiedVariant,它指向面。因此,您可以推断出它只是一个传统字符。
但是面也有一个kTraditionalVariant,它指向面。这就是系统中断的地方:如果您使用此数据来推导面仅是简化字符,那您就错了...
另一方面,韩文具有kTraditionalVariant,指向韩文,并且这两个是"真实的"简体/繁体对。但是,Unihan数据库中没有任何东西可以将韩/韩之类的情况与面/面之类的情况区分开。
正如我认为您已经发现的那样,您做不到。简体和繁体只是两种书写同一字符的样式-就像欧洲语言的罗马文字和哥特文字之间的区别。
-
我猜就是这样。 功能超过表格类型的东西。 这是一个陷阱。您已经必须知道字符是否为S / T才能检查其值。 所以我只是先建立字典,然后再检查那些:)
-
顺便说一句-实际上有一种检查字节的方法,但是unicode网站说这是不切实际的,因为有很多异常。 去搞清楚! :)