日本語とASCII文字を含む配列があります。読み取った文字が英字なのか日本語なのか調べています。
これを解決するために、私は次のようにフォローしました
- 最初のバイトを読み取り、multicharcterswidth が 1 に等しくない場合、ポインターを次のバイトに移動します。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++
英語ではうまくいきましたが、日本語の半角ではうまくいきませんでした。
どうすればこれを処理できますか?