- ベストアンサー
C言語でUTF-8コードで読み込んで表示は日本語にしたい
C言語で、外部ファイルからバイナリ形式でUTF-8の文字コード、 たとえば「E38182」だと「あ」になりますけど、「E38182」を読み込んで画面では「あ」と表示したいのですが、これはどのようにすれば一番カンタンに出来るのでしょうか? 最終的に第一水準文字はすべて置き換える予定なので、なるべく手間のかからない方法をとりたいと考えています。 ちなみに、ソースにはそのまま「あ」と入力すれば「あ」と表示される環境にあります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> >計算で簡単に変換することができます。 > 最初からそれをきいていました。分かりにくくてすみません。 UTF-8のエンコーディングのルールはわかりますか?(わからない場合は参考URLを見てください) これが分かれば、UTF-8からUCS-2への変換は簡単に計算できるはずです。 libiconvやICUなどを使っても変換できますが、かえって面倒な気がします。 AMD1以降の規格に対応した処理系であれば、wctombを使わなくてもfputwcなどで直接出力するのもありです。 あるいは、処理系によってはUTF-8のためのロケールを設定できることもあるでしょう。
その他の回答 (3)
- jacta
- ベストアンサー率26% (845/3158)
#2です。 > UTF-8からワイド文字への変換は自分で「E38182」は「あ」、「E38184」は「い」、と全部定義しなければならないのですね。 そんなことをしなくても、計算で簡単に変換することができます。 全部定義するのであれば、ワイド文字を介さずに、直接最終的な文字コードへの変換表を作った方が手っ取り早いと思います。
- jacta
- ベストアンサー率26% (845/3158)
環境が書かれていませんが、最も多くの環境で通用する方法としては... 読み込んだUTF-8をいったんワイド文字に変換してから、wctomb関数などで多バイト文字に変換する方法です。wctomb関数を使う前にsetlocale関数で適切なロケールにすることを忘れないでください。 この方法は、ワイド文字の内部表現がUCS-2または4の場合なら簡単に実装できるはずです。
お礼
ありがとうございます。 ということは、UTF-8からワイド文字への変換は自分で「E38182」は「あ」、「E38184」は「い」、と全部定義しなければならないのですね。
http://directory.fsf.org/GNU/libiconv.html http://www.linux.or.jp/JM/html/LDP_man-pages/man3/iconv.3.html
お礼
ありがとうございます。 しかし、iconvは文字列を変換するのであって、E38182のようなコードは変換できないと思うのですが。 iconvのインストールを行ったところ、make出来なくなったので消しました。
お礼
>計算で簡単に変換することができます。 最初からそれをきいていました。分かりにくくてすみません。 もしかしてそれがiconvを使うものですか?