Delphi XE のIdhttpでEUCページの「〜」が文字化けする

解決


じろう  2012-08-20 06:01:27  No: 42791

DelphiXEとIndyで開発を行っております。

以前はDelphi7を使用していたので、文字コードの扱いの変更にとまどっております。

http://www.watercolor-city.net/ct_delphi/delphi_tiburon/doc_thirdparty/tp_indy_getwithtencoding.htm
こちらのページを参考にsjisとUTF8のページは問題なく取得できておりますが、EUCのページで記号(確認できているのは「〜」です)の変換がうまくできていないようです。

通常の日本語は文字化けせずにMemoに表示可能なのですが、「〜」が違う文字で表示されてしまいます。
見た目は確かに「〜」なのですが、Posで検索できず、どうやら違う文字になってしまっているようです。

上記ページの文字コードを 20932 として使用しましたが、別の番号、もしくは、方法をご存じの方いらっしゃいましたら是非ご教授頂きたく思います。

ちなみに、変数をAnsiStringとしてIdhttp.Getを直接代入した場合は、「〜」が「?」になってしまいます。

また、Delphi7ではjconvertを使用して変換しておりましたが、問題なく変換できておりました。

よろしくお願い致します。


Atchoum  2012-08-20 23:12:16  No: 42792

http://charset.uic.jp/compare/euc-jp/cp51932/bold/
このページのA1C1のようなぎざぎざっぽい〜になる感じでしょうか?

51932はどうでしょうか?
ただし、TEncodeingでは指定できないのでConvertMultiByteToUnicodeを使うようです。

参考
http://ht-deko.minim.ne.jp/tech021.html


DEKO  2012-08-21 21:49:02  No: 42793

Atchoum さんの仰るように、EUC のコードページ 51932 だと化けなかったと記憶しています。
以下のデブキャン資料の P.41 "ANSI からUnicode へのマッピング(Windows)" に詳細があります。

[Delphi での文字コードのハンドリングについて (フルサイズ版)]
http://conferences.embarcadero.com/article/images/40483/devcamp_encore_20100415_Full.pdf

MECSUtils.ConvertMultiByteToUnicode() を使って変換するか、
TEncoding で処理したければ totonica さん作の CP51932Encoding を利用する事になると思います。

[CP51932Encoding]
http://www.watercolor-city.net/ct_delphi/index.htm


じろう  2012-08-23 07:26:13  No: 42794

返信が遅くなり申し訳御座いません。

Atchoum様、DEKO様。
まだ確認ができていないので完了のご報告ができないのですが、まずはお教え頂きお礼申しあげます。

これよりリンク先の内容を熟読し、最適なものを使用させていただこうかと思います。

また不明な点が出てきましたら改めて質問させてください。

有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加