- ベストアンサー
C++で文字コードの変換
こんにちは! C++のソース上で、UTF-8で記述された文字列をSHIFT-JISに変換する方法をご存知の方いらっしゃいましたらご教示願います。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
100種以上の文字コードを変換できるライブラリ:ICU が存在します。
その他の回答 (4)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
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
お礼
ありがとうございます! 早速拝見させて頂きたいと思います。
- JaritenCat
- ベストアンサー率37% (122/322)
UTF-8はunicodeの一種ですね。 Visual BasicやWin32APIでは直接変換はできないと思います。一旦UTF-8→windows内部で使われているunicode(たぶんUTF-16)に変換してそれからS-JIS変換ではないでしょうか。 自前で変換をやろうとすると単純な計算では無理なので変換テーブルを使うことになると思います。 どっかからライブラリを持ってきたほうが確実ですね。(どこにあるかは、僕は知りません)
お礼
ありがとうございます! ほとんど知識がなかったのですが、UTF-16について調べてみたところ、やはりご指摘のように間の変換が必要であるということが分かりました。変換方法について今後も調べていきたいと思います。
- VT250F
- ベストアンサー率30% (26/84)
おっと、Visual Basic なら、 StrConv("aaa", vbWide) と言う、文字列コンバート関数があるのですが、 そんな関数が提供されていないか、 調べてみるのも一考ですね。
お礼
ありがとうございます! まだそれに代わる関数は見つけられていないのですが、探してみたいと思います。
- VT250F
- ベストアンサー率30% (26/84)
UTF-8 とはユニックスのコードのことでしょうか。 とりあえず 片方のOSのコード体系と、SHIFT-JISのコード体系を ヘキサダンプを取得して調べることです たとえば、「あ」という全角が16進数で表現すると ユニックス ff01 シフトジス aaa5 だと仮定すると、「い」は ユニックス ff02 シフトジス aaa6 と類推できますよね。 この法則を利用して変換関数を作るのです。 1000文字変換しても最近のパソコンならコンマ数秒で変換しますよ お試しあれ。 両方のオペレーティングシステムに精通していないと できない芸当です。
お礼
ありがとうございます! ICUというものを初めて知りました。勉強させて頂きたいと思います。