• ベストアンサー

C++でEUC-JPをSJISに変換したい。

C++で、ライブラリなど使わずにcsvファイルの文字コードEUC-JPをSJISに変換しようと試行錯誤しましたができませんでした。 googleなどで検索したのですが、なかなかうまくいかず手詰まり気味で投稿させていただきました。 16進数の値で調整するのは理解したのですが、ファイル全部を一括でする方法が導き出せませんでした。Linuxのiconvコマンドみたいにさっくりできたら良いのですが、C++だと難しく・・・。 ご存知の方、ご教示を宜しくお願いします。 環境はLinuxのC++で変換するプログラムです。

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

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

EUC-JPからシフトJISへの変換であれば、計算でできます。 コードを貼ってもよいのですが、先人の成果物がありますので、それを紹介しておきます。 http://oku.edu.mie-u.ac.jp/~okumura/algo/ ↑にある『C言語による最新アルゴリズム事典』に、skanji.cというソースファイルがあります。 これは、JISコードからシフトJISに変換するものですが、JISコードの第1、第2バイトにそれぞれ0x80を加えればEUC-JPになりますので、ほんの少しの改造で何とかなるはずです。 あと、これはCのソースですが、C++でもほぼそのまま使えるはずです(念のため)。

Financier
質問者

お礼

ソースファイルのURLありがとうございました! 今回はsystem()関数を使うことで解決しましたが、今後の為にもURL先のソースを使って別Verを着くタイと思います!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

厳密に言えば、ライブラリ無しだと難しいでしょう。printfやfgetcも「標準ライブラリ」の一部ですから。 まあ、C言語の一部みたいなものなので、それくらいはいいとして。 EUC-JP→Shift_JISだけなら、極簡単な部類に入ると思います。 エラー処理とか考えなけば、ファイルを順番に読んで ・EUC-JPの2バイト文字の1バイト目→もう1バイト読み込み→(一度JISにすると対応式に使いやすいかも)→Shift_JISに変換 ・EUC-JPの1バイト文字→そのまま とするだけですから。 なにがどううまくいかないのでしょうか?それが無ければこれ以上アドバイスのしようがありません。

Financier
質問者

お礼

なるほど。詳細な手順ありがとうございました! system()関数を使うことで解決しました。

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> Linuxのiconvコマンドみたい なら、libiconvを使えばいいのでは?

Financier
質問者

お礼

早速の返信ありがとうございます。 調べてみましたが、パッケージインストールが必要みたいなのでダメでそうです。 パッケージやライブラリなど導入せずにプログラミングだけだと難しいでしょうか・・・。

すると、全ての回答が全文表示されます。