2011-07-08 20 views
1

私はRubyを使用してURLを開き、その内容を読み取ります。私が読んでいるファイルのコンテンツタイプは 'text/plain'です。open(url)からのコンテンツのサニタイズ.read

問題は、これにエスケープしたいいくつかの文字が含まれていることです。たとえば、プレーンテキストに登場する文字の1つは、ハイフンのASCIIである「\ 240」です。

テキストのどこにでもハイフンが表示されないため、これがどのように生成されているのか不思議です。それでも、それは目に見えない存在で、putsを使用してコンソールにテキストを印刷すると、「\ 240」が表示されます。

もう1つ、奇妙な文字のこのようなインスタンスをどのようにエスケープしますか?理想的には、「\ [some number]」という形式のすべての文字をエスケープしたいと考えています。私は使用しています

"\240".gsub(Regexp.new("\\\d+"),"") 

しかし、それは動作していないようです。

URLを開くことから読み取られたプレーンテキストコンテンツのサニタイズの伝統的な方法はありますか?

+0

ハイフンは「\ 240」ではありません。ハイフンは下位ASCII文字、 '45.chr#=>" - "'です。上位ビットの文字が表示されています。 –

+0

URLをどのように開いていますか? URLとサンプルコードを表示します。 Net :: HTTPとOpen :: URIの両方で、コンテンツエンコーディングを見て、サーバーがその文書をどの文字セットと見なすかを確認できます。問題はサーバーが間違っている可能性がありますが、それはあなたの出発点です。 'HEAD'リクエストをしてエンコーディングを見つけ、Rubyに実際のボディを受け取ったときにそれを使用するように指示できます。それは誤解されている文字を避けるのに役立ちます。 –

答えて

1

この状態で場を持った後、私は私のためのトリックを行い、次の正規表現が見つかりました:あなたは返さなってきたテキストの文字セットをチェックすることをお勧めします

str.gsub(/[^\x00-\x7F]/,'') 
+0

私はRuby 1.8.7を使用していますが、これはうまくいきます! – deruse

2

を。それは頻繁に高い文字を持っているUTF-8かもしれません。 Ruby 1.9は、文字セットとそれらの間の切り替えを大きくサポートしています。 str.encode("US-ASCII", :invalid => :replace, :undef => :replace, :replace => "?")を使用して文字列を標準ASCIIにし、奇数の文字を?に置き換えました。

+0

私はこの答えが好きで、Ruby 1.9に移行した後にこのアプローチを使用する予定です。ありがとう! – deruse

関連する問題