2011-01-09 5 views
0

(Ruby 1.8を使用)Rubyでは、テキスト処理でサポートされていない文字を自動的に変換する方法は?

私は、エンコーディングなどについて簡単に理解しています...しかし、私が知りたいのは、与えられたテキストファイルを扱う任意のスクリプトでは、非標準文字を最も近い印刷可能文字に変換する必要があります。私は "オールインワン"の修正がないことを認識していますが、これは英文のテキストファイルですので、英語のテキストフォーマットでは比較的一般的な問題でなければならないことが緩和されているのだろうかと思います。例えば

は、テキストファイルで、私はこのようなエントリを持っている:

0-8­23 

私はそれを入力したとしてハイフンは文字通りハイフンであること。ファイルでは、ハイフン(nダッシュ?)のようなものですが、コピーして貼り付けると、たとえば、このブラウザのテキストボックスには表示されません。 Rubyスクリプトを経由して、それをプリントアウト

はこれを取得します。

08�23 

は、どのように私は私のスクリプトはダッシュにそれを解決するのですか。グレムリン以外の何か?

答えて

2

特にワードプロセッサの出力でhyphen-like charactersdashesを実行するのは非常に一般的です。文字を表すバイトが何であるかを知っていれば変換するのは難しくありませんが、いくつかの異なるものを持つドキュメントを取得すると苦痛になります。それはあなたが他のアクセント付きの文字をミックスに投げ込むと悪化します。

Ruby 1.8では、マルチバイト文字セットと1.9+はサポートされていませんが、Iconvライブラリを使用することで多少対応できます。

Iconvでは、US-ASCII、ISO-8859-1、WIN-1252などのさまざまな文字セット間で変換できます。類似した文字が存在しない場合は、アクセント付き文字から同様に見える文字に変換する方法を知っているため、正規表現よりもスマートです。

私はsome example codeを関連する質問に回答しています。また、答えにリンクしているJames Greyの記事も読んでください。それは問題とそれを修正する方法を説明し、Iconvを推薦することに終わる。

0

あなたはGSUBをホワイトリストに登録できます。より多くの情報を知らなくても

string.gsub(/[^a-zA-Z0-9]/) 

、私はあなたのための完璧な正規表現を構築することはできませんが、一般的なアイデアは、あなたが(何かを期待しているものではありません何かを交換することですが手紙や数字、予想される記号ではありません)。

+0

ああ、ASCIIに型キャストする方法があるかどうかを確認していただけです。ですから、アクセント付きの文字を正規化しようとするサービス、例えばeには、それを扱うための長い正規表現がありますか? – Zando

+0

umm、必ずしもそうではありません。それらは複数の正規表現を持つことができ、そうするために自然言語処理を使用することもできます。例えば、それは文章を読むでしょう(スペイン語で)¿Dondé? 1つの疑問符を持つDond(+)がdondéであることが89%であり、それに応じて処理することが分かっています – sethvargo

関連する問題