ReadFile、InternetReadFileでの文字化けの解決方法

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
西野孝雄

ReadFile、InternetReadFileでの文字化けの解決方法

#1 投稿記事 by 西野孝雄 »

件名のままなのですが、IEでWEBページを保存してそれをReadFileで読むと
日本語部分なぜか文字化けしてしまいます。文字化けしない物もあります。
メモ帳やhtmlエディタで見ると、文字化けしないのに。

文字化けするのは、例えばgoogleの検索結果。
しないのはSinryowさんのサイト http://ab.sinryow.net/
activebasic.comは保存して、メモ帳で見ると、既に文字化け。

InternetReadFileでWEBソースを読むと改行部分が文字化け(というか消えてる?)します。

調べてみると、これは文字コードの判定がうまくいってないからの様なのです。
文字化けするファイルを開いて、別のファイルを作って内容をコピペ保存すると
---------------------------
このファイルは、ANSI テキスト ファイルとして保存すると失われてしまう Unicode 形式の文字を含んでいます。Unicode の情報を保存するには、下の [キャンセル] をクリックし、[文字コード] から [Unicode] を選択してください。続行しますか?
---------------------------
と出て、続行して保存すると、そのファイルは文字化けせずに読めますので、
この事からも文字コードが原因であってると思うのですが、解決方法がわかりません。
あと、IEから保存した場合だと英字が大文字なのに、InternetReadFileだと小文字だったり。
どなたか、この事に関して、解決方法を教えて下さい。宜しくお願いします。

ReadFile、InternetReadFilet、共に以下のページと同じですので、コードは間違っていないと思います。
Win32プログラミング講座 ~ Step11
http://resume-next.hp.infoseek.co.jp/data/Win.html#Read

OS winXP Home sp2
AB 4.13
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#2 投稿記事 by hira »

文字コードがShift-JISのページは文字化けしませんが、それ以外のページでは文字化けが発生するかと思います(Google…UTF-8、activebasic.com…EUC)。
InternetReadFileで読み込んだ後にそのデータをShift-JISに変換してやれば正しく読むことができるでしょう。
http://homepage1.nifty.com/MADIA/vb/vb_ ... 80008.html
↑はVBでのEUC→Shift-JIS変換プログラムですが、改造すればABでも使用可能なはずです。
文字コードには他にもJIS、UTF-8などがありますが、検索していろいろ情報を集めてみてください。
西野孝雄

ReadFile、InternetReadFileでの文字化けの解決方法

#3 投稿記事 by 西野孝雄 »

hiraさん、返信有難うございます。

やはり、文字コードが原因なのですね。幾つか解った事を書きます。
InternetReadFileをString型で読み込むと、EUC等でデータが壊れる事があるらしいです。AB以外での話しなので関係ないかもしれないけど。
実際Byteptrでやってみたけど特に変化は無し。
InternetReadFileは、UTF-8の時のみ、自動的にSHIFT-JISに変換して読み込んでくれる。WEBソース内のMETAタグ内もSHIFT-JISにかわってます。手間が省けて楽ですが、一体どういう仕組みなのでしょう。タグ内の文字が小文字になったり。仕様が不明ですね。

検索して情報を集めてくださいとの事ですが、hiraさん自身が文字コード変換のDLLを公開しているではありませんか。(しかもソース付き!)
質問する前から過去ログで知ってましたが、本当に文字コードが原因なのか分からなかったので、質問しました。有り難く使わせてもらいます。
http://www.activebasic.com/forum/viewto ... light=SJIS

ですが、判定が違ったりEUCでは一部文字が欠けたり、するようです。
UTF-8はうまく変換が出来ないので、以下を使わせて頂きました。
http://www.activebasic.com/forum/viewto ... =SHIFT-JIS

他にも、判定方法や細かい部分は良く分からないですが、その事は調べて分からなかったら、又質問します。
日本語部分の文字化けが解決でき、当初の目的は達成できましたし。
本当に有難うございました。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

Re: ReadFile、InternetReadFileでの文字化けの解決方法

#4 投稿記事 by hira »

やはり、文字コードが原因なのですね。幾つか解った事を書きます。
InternetReadFileをString型で読み込むと、EUC等でデータが壊れる事があるらしいです。AB以外での話しなので関係ないかもしれないけど。
実際Byteptrでやってみたけど特に変化は無し。
InternetReadFileは、UTF-8の時のみ、自動的にSHIFT-JISに変換して読み込んでくれる。WEBソース内のMETAタグ内もSHIFT-JISにかわってます。手間が省けて楽ですが、一体どういう仕組みなのでしょう。タグ内の文字が小文字になったり。仕様が不明ですね。
VisualBasicだとString型ではデータが壊れるようです。ActiveBasicではString型でも問題ないはずです。
タグが小文字になる問題も私はよくわかりませんが、少なくともプログラムで扱う上で支障はないので気にしていません(笑
検索して情報を集めてくださいとの事ですが、hiraさん自身が文字コード変換のDLLを公開しているではありませんか。(しかもソース付き!)
質問する前から過去ログで知ってましたが、本当に文字コードが原因なのか分からなかったので、質問しました。有り難く使わせてもらいます。
正直言って、動作を検証する暇がなく自信がなかったのです(^^;;
結局これの変換コードもどこかのサンプルを拾ってActiveBasicで動くようにしたものでして。
EUCやUTF-8でうまく動かないことがあるのは、C言語などからの翻訳(?)の際にコードが間違っていたりしたことが原因かと…。すみませんm(_ _)m
西野孝雄

Re: ReadFile、InternetReadFileでの文字化けの解決方法

#5 投稿記事 by 西野孝雄 »

全然すいませんな事はないですよ。
私がやりたかった事は出来るようになったので、充分役に立っております。
有難うございます。
返信する