例如,delphi代码
wchar_IsASCii : array[0..1] of WCHAR ;
wchar_IsASCii[0] := 'A' ;
wchar_IsASCii[1] := 'じ' ;如何判断wchar_IsASCii[0]属于ASCII码,还是wchar_IsASCii[1]不属于ASCII码?
实际上,我只需要知道UNICODE字符是否属于ASCII,这就是如何区分WCHAR字符是中文、日文还是ASCII。
发布于 2013-04-17 12:40:32
我不知道Delphi,但我可以告诉你的是,你需要确定字符在Unicode中的范围。这是一个关于在Unicode中查找CJK字符的链接:What's the complete range for Chinese characters in Unicode?
除非Delphi有一些很好的库来区分中文和日文字符,否则你必须自己决定。关于如何做到这一点,这里有一个很好的答案:Testing for Japanese/Chinese Characters in a string
发布于 2013-04-17 14:06:10
问题是。你说的ASCII是什么意思?最初的ASCII标准是7位代码,也就是众所周知的Latin1 -它甚至不是一个字节。
然后,如果你使用所谓的“扩展ASCII”--一个1字节项--那么它的一半可以放在任何东西的旁边。它可以由希腊语在一台机器上,欧洲变音在另一台上,西里尔文在第三个…等。
所以我认为,如果你所需要的是测试你是否有7位Latin1字符--排除来自法语、德语、西班牙字母和所有斯堪的纳维亚字母的扩展字符,那么--因为Unicode被设计为Latin1的另一个超集,所以你需要的是检查(0 <= Ord(char-var)) and ($7f >= Ord(char-var))。
然而,如果你真的需要辨别语言,如果你认为希腊语和西里尔语有点ASCII和日语字母表(顺便说一句,有两个,平假名和片假名)不(或者如果你认为法语和德语或多或少像ASCII,但俄语不是),你就得看看Unicode范围。
http://www.unicode.org/charts/index.html
要使用UCS4标准的32位codepoint,可以使用http://docwiki.embarcadero.com/Libraries/XE3/en/System.Character.ConvertToUtf32
有接近标准的IBM Unicode类,但看起来没有很好的Delphi exists Has anyone used ICU with Delphi?的翻译。
你可以使用绝地CodeLib,但是它的表格(注释是矛盾的)要么来自Unicode4.1或5.0,而不是来自当前的6.2,尽管是for Japanese version 5.0 should be enough。
您还可以使用Microsoft MLang interface查询类似互联网的字符代码(RFC1766)
发布于 2013-04-17 13:28:47
一般来说,一个字符属于ASCII码,如果它的代码在0x0000..0x007F范围内,请参见http://www.unicode.org/charts/PDF/U0000.pdf。一个新的Delphi具有类函数TCharacter.IsAscii,但它是由于某种奇怪的原因而声明为私有的。
https://stackoverflow.com/questions/16051416
复制相似问题