• ベストアンサー

C++で文字コードの変換

こんにちは! C++のソース上で、UTF-8で記述された文字列をSHIFT-JISに変換する方法をご存知の方いらっしゃいましたらご教示願います。

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

  • ベストアンサー
回答No.3

100種以上の文字コードを変換できるライブラリ:ICU が存在します。

参考URL:
http://oss.software.ibm.com/icu/
domagoo
質問者

お礼

ありがとうございます! ICUというものを初めて知りました。勉強させて頂きたいと思います。

その他の回答 (4)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.5

WindowsでしたらADOのStreamオブジェクトを使うのも VBのサンプルで、ファイルの文字コードを変換しています。 もっといいサンプルは自分で見つけてください。 http://homepage1.nifty.com/MADIA/vb/vb_bbs/200405_04050030.html 文字コードの指定はCharsetプロパティでご希望のコードを。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdprocharset.asp

domagoo
質問者

お礼

ありがとうございます! 早速拝見させて頂きたいと思います。

回答No.4

UTF-8はunicodeの一種ですね。 Visual BasicやWin32APIでは直接変換はできないと思います。一旦UTF-8→windows内部で使われているunicode(たぶんUTF-16)に変換してそれからS-JIS変換ではないでしょうか。 自前で変換をやろうとすると単純な計算では無理なので変換テーブルを使うことになると思います。 どっかからライブラリを持ってきたほうが確実ですね。(どこにあるかは、僕は知りません)

domagoo
質問者

お礼

ありがとうございます! ほとんど知識がなかったのですが、UTF-16について調べてみたところ、やはりご指摘のように間の変換が必要であるということが分かりました。変換方法について今後も調べていきたいと思います。

  • VT250F
  • ベストアンサー率30% (26/84)
回答No.2

おっと、Visual Basic なら、 StrConv("aaa", vbWide) と言う、文字列コンバート関数があるのですが、 そんな関数が提供されていないか、 調べてみるのも一考ですね。

domagoo
質問者

お礼

ありがとうございます! まだそれに代わる関数は見つけられていないのですが、探してみたいと思います。

  • VT250F
  • ベストアンサー率30% (26/84)
回答No.1

UTF-8 とはユニックスのコードのことでしょうか。 とりあえず 片方のOSのコード体系と、SHIFT-JISのコード体系を ヘキサダンプを取得して調べることです たとえば、「あ」という全角が16進数で表現すると  ユニックス ff01  シフトジス aaa5 だと仮定すると、「い」は  ユニックス ff02  シフトジス aaa6 と類推できますよね。 この法則を利用して変換関数を作るのです。 1000文字変換しても最近のパソコンならコンマ数秒で変換しますよ お試しあれ。 両方のオペレーティングシステムに精通していないと できない芸当です。

関連するQ&A