• ベストアンサー

【C&C++】EUC_JPをSHIFT-JISに変換したい

WinInetで指定したURLのHTMLを表示するコンソールプログラムを作成したのですが、EUC_JPで書かれたWebページが文字化けをしてしまいます。 SHIFT-JISで書かれているWebページは特に問題なく、自分もEUC_JPからSHIFT-JISに変換したいと考えています。しかし、色々と参考書やWebなどを調べてみたのですが、自分には少し難しすぎてより分かりやすい説明を求めています。 データの読み出しはInternetReadFileを使用しています。以下がそのソースです。 while (1) { InternetReadFile(hUrl, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead); szBuf[dwRead] = '\0'; if (dwRead == 0) break; str = str + szBuf; } どうかご回答よろしくお願いします。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

 ん~ちょっと待って。QNo.1955793で同じ質問してるよね? その時も書こうかと思ったんだけど、難しいものは難しいなりに「ここまで理解できたけどここからが分かんない」ってのがあると思うのさ。  でないと、どこまで分かっているのかが分からないので、「え? 一から十まで説明しろって事?」となるよね。こっちも。  例えば、 ・EUC-JPとSJISって何ですか? ・エンコーディング(文字コード)って何ですか? ・実はEUC-JPとSJISのコード体系すら分からない ・EUC-JPは「JIS+あるビット」というのは理解した ・SJISとは、文字どおりJISをシフトしたものだという事は理解した ・JIS-SJIS相互変換を行えれば後は楽勝という事は分かった ・JIS→SJISでビットのシフト方法が分かった  どこでつまっているのかが私には分からないので・・・まさか原理から変換方法まで説明しろって言ってる訳じゃないでしょ?  かいつまんでEUCJP→SJIS変換の流れを説明すると、 1.ASCIIとEUCを検出して、ASCIIはそのまま流す、EUCは2以下の手順で変換 2.上位1ビットを落としてJISに変換 3.2バイトのJISを1バイトずつに分ける 4.上位バイトの範囲でマスクを変える 5.下位バイトの範囲でマスクとバイアス(元JISに足す数)を変える となるけど、つまずいてる場所は4か5だと思うんだよ。なので、せめてどこまで作ったかを示せば、回答が付きやすくなるだろうし、回答の正確さや精度もあがる。何を回答すれば良いか分かるからね。  難しいところもある程度までは自分で進めろって言っている訳じゃない(考えてみては欲しいけど)。別に1と2だけしかできてなくっても良いと思うんだ。「俺はここまで頑張った。次のステップには何をどうすれば良い?」って事だと思う。

happygocrazy
質問者

お礼

ありがとうございました。EUC_JP→SJIS変換の流れが参考になりました。これが基本的なやり方なのですね。 JavaやPerlで同様のプログラムを作ったことがあるのですが、このような方法でなく簡単だったのでもっと簡単にできるのかなと思っていました。簡単にやる方法として他人が作ったモジュールを利用することなのですね。 自分で書く方法としては、anmochiさんが示してくださったEUC_JP→SJISの流れでやればよいのですね。

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

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

人の作ったライブラリを使う

参考URL:
http://tricklib.com/cxx/ex/babel/,http://icu.sourceforge.net/
happygocrazy
質問者

お礼

参考URL拝見しました。大変参考になりました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

まあ、どうしてもプログラムでやりたいってのなら、実装コード自体は参考URLの様になりますが、 そもそも変換の実装すらしてないプログラム見せられて、答えを答えるのは間違ってる気がします。

参考URL:
http://www.net.is.uec.ac.jp/~ueno/material/kanji/euc2sjis.html
happygocrazy
質問者

お礼

C言語による文字コード変換において基本的なやり方というもの自体を知らなかったので、申し訳ありません。参考URLありがとうございました。

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

前回の質問の際に、納得されたのでは?

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1955793
happygocrazy
質問者

補足

前回の説明で、メタタグの内容を見て文字コードを判別できるようにしました。正規表現を使いました。ただし、思ったより回答が得られなかったので新規の質問にすれば露出が増えると思い、一旦終了して再び質問をしてしまいました。申し訳ありません。以後いたしません。

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

関連するQ&A