2011-12-06 10 views
2

私は検索、Googleを使用しようとするが運がない。`gsub ':互換性のない文字エンコーディング:UTF-8とIBM437

OS:Windows XPの Rubyのバージョン1.9.3po

エラー:

`GSUB ':互換性のない文字エンコーディング:UTF-8とIBM437

コード:

require 'rubygems' 
require 'hpricot' 
require 'net/http' 

source = Net::HTTP.get('host', '/' + ARGV[0] + '.asp') 


doc = Hpricot(source) 

doc.search("p.MsoNormal/a").each do |a| 
    puts a.to_plain_text 
end 

プログラムは少数の文字列を出力しますが、テキストが "NOŻYCE"のときは上記のエラーが発生します。 誰かが助けてくれますか?

答えて

2

あなたはオリジナルのヴィンテージ、レトロDOS形式になって表示されますので、UTF-8へのあなたのHTMLに変換しようとすることができ:

によって期待されるようUTF-8に、8ビットのASCIIからそれを反転する必要があり
source.encode!('UTF-8') 

Hpricotパーサ。

+0

ありがとう、私はあなたのソリューションを試してみましたが、新しいエラーが発生しました:エンコード:ASCII-8BITからUTF-8への "\ xCA":/ – drupality

+1

ソースのエンコーディングを強制する必要があります: 'source.force_encoding 'IBM437')。encode( 'UTF-8') '代わりに?いずれにせよ、 '\ xCA'はあなたが持っている'Ż'ではなく '╩'であるので、IBM437は間違っている可能性があり、実際には何でも置き換えてください。 – tadman

+0

Thxが助けになりました:source.force_encoding( 'IBM437')。encode( 'iso-8859-2')、私はgettinエラーです:IBM437からISO-8859-2へのエンコード:u + 2569 UTF-8 – drupality

3

ソース変数の内部エンコーディングはUTF-8ですが、それはあなたが望むものではありません。

tadmanが書いたように、まず文字列の実際の文字がIBM437エンコーディングであることをRubyに伝えなければなりません。その文字列を好きなエンコーディングに変換できますが、そのような変換が可能な場合のみ可能です。

すべてのIBM437文字がその文字セットに変換できるわけではないため、文字列をISO-8859-2に変換することはできません。おそらくUTF-8に固執するのがあなたの最良の選択肢でしょう。

とにかく、そのファイルがIBM437で実際に送信されていることを確認してください。おそらく、HTTPサーバーに格納されているかもしれませんが、別のエンコーディングでオーバー・ザ・ワイヤーで送信されます。あるいは、IBM437では正確ではないかもしれませんが、MS-DOC Latin 2(ISO Latin 2とは異なる)とも呼ばれるCP852かもしれません。

+0

返信ありがとうございます。私はJavaでやりました。 – drupality

関連する問題