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

Delphi 如何区分WCHAR是中文、日文还是ASCII码?,delphi,ascii,Delphi,Ascii,例如delphi代码 wchar_IsASCii : array[0..1] of WCHAR ; wchar_IsASCii[0] := 'A' ; wchar_IsASCii[1] := 'じ' ; 如何判断wchar\u IsASCii[0]属于ASCII,还是wchar\u IsASCii[1]不属于ASCII 实际上,我只需要知道UNICODE字符是否属于ASCII,这就是如何区分WCHAR字符是中文、日文还是ASCII。我不懂Delphi,但我能告诉你的是,你需

例如delphi代码

  wchar_IsASCii : array[0..1] of WCHAR ;

  wchar_IsASCii[0] := 'A'   ;
  wchar_IsASCii[1] := 'じ'  ;
如何判断
wchar\u IsASCii[0]
属于ASCII,还是
wchar\u IsASCii[1]
不属于ASCII


实际上,我只需要知道UNICODE字符是否属于ASCII,这就是如何区分WCHAR字符是中文、日文还是ASCII。

我不懂Delphi,但我能告诉你的是,你需要确定字符在UNICODE中的范围。以下是有关在Unicode中查找CJK字符的链接:

除非Delphi有很好的库来区分中文和日文字符,否则你必须自己决定。关于如何做到这一点,这里有一个很好的答案:

通常,字符属于ASCII,如果其代码在0x0000..0x007F范围内,请参阅。一个新的Delphi具有类函数TCharacter.IsAscii,但它是由于某种奇怪的原因被声明为私有的。

ASCII字符的十进制值小于127


然而,除非您运行的是20世纪60年代的电传打字机,否则ASCII字符可能不够。ASCII字符仅包含英语字符。如果您确实需要支持“西欧”字符,如德语、法语、西班牙语、瑞典语等中的umlaut元音、graves等,那么测试Unicode字符值的问题是。。。你说的ASCII是什么意思?原始的ASCII标准是7位代码,称为拉丁文1,它甚至不是一个字节

然后,如果你有所谓的“扩展ASCII”-一个1字节的项目-然后它的一半可以旁边的任何东西。它可以是希腊语的一种,欧洲语的另一种,西里尔语的第三种。。。等等

所以我认为,如果你只需要测试你是否有7位的
Latin1
字符——排除了法语、德语、西班牙语和所有斯堪的纳维亚字母表中的扩展字符,那么——因为Unicode被设计成
Latin1
的另一个超集,你需要的是检查
(0=Ord(char-var))


然而,如果你真的需要告诉语言,如果你认为希腊语和西里尔字母有点ASCII和日语字母(顺便说一下,平假名和片假名有两个)(或者如果你认为法语和德语或多或少类似ASCII,但是俄语不是)你就必须看Unicode范围。

要配备
UCS4
标准的32位
codepoint
,您可以使用


除了Unicode的标准IBM类之外,还有其他一些类,但对于Delphi似乎没有什么好的翻译


您可以使用Jedi CodeLib,但它的表(注释相互矛盾)来自Unicode 4.1或5.0,而不是当前的6.2


您还可以使用来查询类似internet的字符代码(RFC1766)


AFAIK
ord($7f)
依赖于代码页。它已经取决于当前的字符集。但是对于所有链接信息+1。AFAIK ASCII=7位,ANSI=所有不同的8位编码-因此您的信息是正确的。@ArnaudBouchez根据规范我记得127和255都是控制代码,而不是符号。OTOH谁关心今天的旧规范:-)//这对许多FTP服务器造成了坏影响,这些服务器不关心控制连接中254/255的特殊转义,windows-1251文件名经常使用它们。//ANSI(至少在Win32意义上)不是代表MBCS与SBCS ASCII的对比吗?@ArnaudBouchez:
$7F
不依赖于代码页。它属于7bit ASCII范围,出于兼容性目的,在所有代码页中都是相同的。但是,8位
$80
-
$FF
值取决于代码页。简而言之,您不能。您需要额外的信息才能确定给定字符来自哪种语言。请参见……但是,您似乎想要确定字符是否超出ASCII范围。这只是问这个字符的值是否大于127,不是吗?无论如何,你似乎应该读一读