入力された文字が Shift-JIS で表現できる文字かどうか判定する

Shift-JIS と比べた場合、Unicode 文字の方が表現できる文字が多いため、Unicode 文字の中には Shift-JIS で表現できない文字が存在します。

例えば、”☻” や “🏣” などの文字は Shift-JIS で表現できません。

そこで、入力された文字(Unicodeの範囲)が、Shift-JIS で表現できるかどうか判定するプログラムを作成しました。
一度、Unicode 文字を WideCharToMultiByte 関数で変換した後、MultiByteToWideChar で元に戻したときに復元できるかどうかで判定を行っています。

コメントにてご指摘をいただきました。WideCharToMultiByte 関数の最後の引数では、入力文字列に対して変換できない文字が存在した場合の真偽値を取得することができます。
その真偽値を使用することにより、上記のコードは、MultiByteToWideChar 関数でもとに戻す処理が不必要となり、下記のようなすっきりとしたコードで表題の処理が実現できます。

コメントいただきました、まさお様有難うございます。


kenjinote

2件のコメント

  1. 最初のWideCharToMultiByte関数の最後の引数を0ではなくBOOL型変数へのポインタを指定することで、Shift-JISに変換できない文字が含まれていた(TRUE)か、含まれていなかった(FALSE)かの情報が返ってくるそうなので、次のMultiByteToWideChar関数を省略できますよ。

    • コメントありがとうございます。最後の引数で変換出来ない文字が含まれているかどうかの情報を受け取ることができるのですね。知りませんでした。記事にも反映致します。ありがとうございましたm(__)m

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする