首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何区分WCHAR是中文、日文还是ASCII?

如何区分WCHAR是中文、日文还是ASCII?
EN

Stack Overflow用户
提问于 2013-04-17 12:20:46
回答 4查看 1.1K关注 0票数 0

例如,delphi代码

代码语言:javascript
运行
复制
  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。

EN

回答 4

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 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

  • http://wiki.delphi-jedi.org/wiki/JCL_Help:TUnicodeBlock
  • http://wiki.delphi-jedi.org/wiki/JCL_Help:CodeBlockFromChar
  • http://wiki.delphi-jedi.org/wiki/JCL_Help:CodeBlockName@TUnicodeBlock

您还可以使用Microsoft MLang interface查询类似互联网的字符代码(RFC1766)

  • http://msdn.microsoft.com/en-us/library/aa741220.aspx
  • http://msdn.microsoft.com/en-us/library/aa767880.aspx
  • http://msdn.microsoft.com/en-us/library/aa740986.aspx
  • http://www.transl-gunsmoker.ru/2011/05/converting-between-lcids-and-rfc-1766.html
  • http://www.ietf.org/rfc/rfc1766.txt
票数 1
EN

Stack Overflow用户

发布于 2013-04-17 13:28:47

一般来说,一个字符属于ASCII码,如果它的代码在0x0000..0x007F范围内,请参见http://www.unicode.org/charts/PDF/U0000.pdf。一个新的Delphi具有类函数TCharacter.IsAscii,但它是由于某种奇怪的原因而声明为私有的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16051416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档