-3

日本語とASCII文字を含む配列があります。読み取った文字が英字なのか日本語なのか調べています。

これを解決するために、私は次のようにフォローしました

  1. 最初のバイトを読み取り、multicharcterswidth が 1 に等しくない場合、ポインターを次のバイトに移動します。2 バイト全体を一緒に表示し、日本語の文字が読み取られたことを表示します。
  2. multicharcterswidth が 1 の場合、そのバイトを表示します。と表示メッセージ英語が読まれました。

上記のアルゴは正常に動作しますが、日本語の半角形式の場合は 1 バイトしかないため失敗します。文字が日本語か英語かを調べるにはどうすればよいですか?

**注:** 私が試したこと Web から読んだ最初のバイトは、アルゴのステップ 1 で説明した日本語かどうかを示します。しかし、半角ではうまくいきません。

編集:私が解決していた問題には、文字列を識別するために、文字の最初と最後に制御文字 0X80 を含めます。制御文字の終わりを識別するために、次のように書きました。

cntlchar.....(私の文字は、日本語にすることができます).....cntlchar

if ((buf[*p+1] & 0X80) && (mbMBCS_charWidth(&buf[*p]) == 1))
  // end of control characters reached
else
  // *p++

英語ではうまくいきましたが、日本語の半角ではうまくいきませんでした。

どうすればこれを処理できますか?

4

2 に答える 2

3

データはWindows Codepage 932を使用している必要があります。それは推測ですが、コードポイントを調べると、あなたが説明していることがわかります。

00コードページは、 ~の範囲の文字7Fが「英語」 (より適切な説明は「7 ビット ASCII」) であり、819FE0~の範囲の文字FFがマルチバイト コードの最初のバイトであることを示しA1DFいます。幅かな文字。

于 2014-08-18T15:09:52.033 に答える