• ベストアンサー

C言語でUTF-8コードで読み込んで表示は日本語にしたい

C言語で、外部ファイルからバイナリ形式でUTF-8の文字コード、 たとえば「E38182」だと「あ」になりますけど、「E38182」を読み込んで画面では「あ」と表示したいのですが、これはどのようにすれば一番カンタンに出来るのでしょうか? 最終的に第一水準文字はすべて置き換える予定なので、なるべく手間のかからない方法をとりたいと考えています。 ちなみに、ソースにはそのまま「あ」と入力すれば「あ」と表示される環境にあります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> >計算で簡単に変換することができます。 > 最初からそれをきいていました。分かりにくくてすみません。 UTF-8のエンコーディングのルールはわかりますか?(わからない場合は参考URLを見てください) これが分かれば、UTF-8からUCS-2への変換は簡単に計算できるはずです。 libiconvやICUなどを使っても変換できますが、かえって面倒な気がします。 AMD1以降の規格に対応した処理系であれば、wctombを使わなくてもfputwcなどで直接出力するのもありです。 あるいは、処理系によってはUTF-8のためのロケールを設定できることもあるでしょう。

参考URL:
http://ja.wikipedia.org/wiki/UTF-8

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

#2です。 > UTF-8からワイド文字への変換は自分で「E38182」は「あ」、「E38184」は「い」、と全部定義しなければならないのですね。 そんなことをしなくても、計算で簡単に変換することができます。 全部定義するのであれば、ワイド文字を介さずに、直接最終的な文字コードへの変換表を作った方が手っ取り早いと思います。

superjbs
質問者

お礼

>計算で簡単に変換することができます。 最初からそれをきいていました。分かりにくくてすみません。 もしかしてそれがiconvを使うものですか?

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

環境が書かれていませんが、最も多くの環境で通用する方法としては... 読み込んだUTF-8をいったんワイド文字に変換してから、wctomb関数などで多バイト文字に変換する方法です。wctomb関数を使う前にsetlocale関数で適切なロケールにすることを忘れないでください。 この方法は、ワイド文字の内部表現がUCS-2または4の場合なら簡単に実装できるはずです。

superjbs
質問者

お礼

ありがとうございます。 ということは、UTF-8からワイド文字への変換は自分で「E38182」は「あ」、「E38184」は「い」、と全部定義しなければならないのですね。

noname#39970
noname#39970
回答No.1
superjbs
質問者

お礼

ありがとうございます。 しかし、iconvは文字列を変換するのであって、E38182のようなコードは変換できないと思うのですが。 iconvのインストールを行ったところ、make出来なくなったので消しました。

関連するQ&A