0

たとえば、デルファイ コード

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

  wchar_IsASCii[0] := 'A'   ;
  wchar_IsASCii[1] := 'じ'  ;

wchar_IsASCii[0]ASCII に属しているか、ASCII に属していないかをどのように判断できますかwchar_IsASCii[1]?

実際には、UNICODE char が ASCII に属しているかどうかを知る必要があるだけです。WCHAR char を中国語、日本語、または ASCII と区別する方法はこれだけです。

4

4 に答える 4

1

問題は... ASCII とはどういう意味ですか? 元の ASCII 標準は 7 ビット コードでLatin1あり、1 バイトではありません。

次に、いわゆる「拡張 ASCII」 (1 バイトのアイテム) が付属している場合、その半分は何の隣にも置くことができます。1 つのマシーンではギリシャ語、別のマシーンではヨーロッパの分音記号、3 番目のマシーンではキリル文字などを使用できます。

したがって、必要なのは 7 ビット文字を持っているかどうかをテストすることだけだと思います-フランス語、ドイツ語、スペイン語のアルファベット、およびすべてのスカンジナビア語のアルファベットから拡張文字を除外します-Unicode は、必要なもののLatin1さらに別のスーパーセットとして設計されているため、それをチェックしています.Latin1(0 <= Ord(char-var)) and ($7f >= Ord(char-var))


ただし、本当に言語を伝える必要がある場合は、ギリシャ語とキリル文字をある程度 ASCII と日本語のアルファベット (ちなみにひらがなとカタカナの 2 つがあります) と見なす場合はそうではありません (または、フランス語とドイツ語を多かれ少なかれ ASCII に似ていると見なす場合は、ロシア語ではありません) Unicode Ranges を確認する必要があります。
http://www.unicode.org/charts/index.html

32 ビットcodepointUCS4標準を使用するには、http://docwiki.embarcadero.com/Libraries/XE3/en/System.Character.ConvertToUtf32を使用できます。


Unicode 用の標準の IBM クラスに次ぐものがありますが、Delphi の適切な翻訳がないように見えますDelphi で ICU を使用した人はいますか?


Jedi CodeLib を使用できますが、その表は (コメントが矛盾しています) Unicode 4.1 または 5.0 のものであり、現在の 6.2 のものではありませんが、日本語版では 5.0 で十分なはずです。


Microsoft MLang インターフェイスを使用して、インターネットのような文字コード (RFC 1766) を照会することもできます。

于 2013-04-17T06:06:10.000 に答える
1

Delphi についてはわかりませんが、文字が Unicode でどの範囲に収まるかを判断する必要があると言えます。Unicode でのCJK 文字の検索に関するリンクは次のとおりです: Unicodeの中国語文字の完全な範囲は?

また、Delphi に中国語と日本語の文字を区別するための優れたライブラリがない限り、自分で判断する必要があります。これを行う方法については、SOに関する良い答えがあります: Testing for Japanese/Chinese Characters in a string

于 2013-04-17T04:40:32.007 に答える
0

ASCII 文字の 10 進値は 127 未満です。

ただし、1960 年代のテレタイプ マシンを実行している場合を除き、ASCII 文字では不十分な場合があります。ASCII 文字は、英語の文字のみをカバーします。ドイツ語、フランス語、スペイン語、スウェーデン語などに見られるウムラウト母音、墓などの「西ヨーロッパ」文字を実際にサポートする必要がある場合は、Unicode char 値 <= 127 をテストするだけでは十分ではありません。東ヨーロッパのスクリプトを使用する必要がない限り、char 値 <= 255 のテストで問題が解決する場合があります。

于 2013-04-17T06:00:19.823 に答える