我有一个UTF8编码的字符串,其中包含日语和罗马字符。 我想确定哪些字符是日文字符,哪些字符是罗马字符?怎么识别?
答案 0 :(得分:7)
您正在寻找Unicode“脚本”属性。我推荐ICU库。
来自:http://icu-project.org/apiref/icu4c/uscript_8h.html
UScriptCode uscript_getScript (UChar32 codepoint, UErrorCode *err)
Gets the script code associated with the given codepoint.
结果会告诉你角色的剧本。以下是返回的一些可能的常量:
LibICU可用于Java,C和C ++。您需要解析Unicode代码点才能使用该函数。
替代方法:您也可以使用Unicode正则表达式,尽管很少有引擎支持这种语法(Perl会...)此PCRE将匹配明确的文本字符串日语,但它不会得到所有东西。
/\p{Katakana,Hiragana,Han}+/
解析这些东西时必须小心,因为日文文本通常包括罗马字或内联数字。浏览ja.wikipedia.org会很快证实这一点。
答案 1 :(得分:6)
您可以使用category在Java中确定Unicode Character.getType()。对于日语,它将是Lo,对于拉丁字符Ll,Lu。
答案 2 :(得分:2)
从Unicode code charts,日文字符可以是平假名,片假名和表意文字。这些集合定义了开始和结束位置,因此您可以创建一个函数来检查字符是否在这些限制范围内。
bool isJapanese(wchar_t w)
{
// Hiragana...
if (w >= 0x3041 && w <= 0x309F)
return true;
// Do the same for the other sets
...
return false;
}
同样,您可以实现isRoman
功能......
答案 3 :(得分:1)
如果您不关心准确性,只需检查每个UTF-8序列的第一个字节:如果序列的长度<= 2(即第一个字节<= 0xDF),则假定为罗马字符,否则为日语。< / p>
就个人而言,我可能只是use Perl。