1

Ruby 1.9.3 用の DocSplit gem を使用して、Word ドキュメントの Unicode UTF-8 バージョンを作成しています。今日驚いたことに、これらのドキュメントの 1 つの特定の部分でテストを実行しているときに、文字エンコードの不一致に遭遇し始めました。

以下にリストする問題を解決するためにさまざまな方法を試しましたが、これまでのところ、非 ASCII 文字をすべて削除するのが最善の方法でした。これは理想とはかけ離れたものです。なぜなら、DB でキャラクターがそれほど問題になるとは思わないからです。

gsub(/[^[:ascii:]]/, "")

これは、私の出力がどのように見えるか、および私が期待しているもののサンプルです。

My CODES'S APOSTROPHE

My CODES’S APOSTROPHE

2 番目のアポストロフィは波線になっている必要があります。これを irb に貼り付けると、次のようになります: \U+FFE2

このキャラクター専用の正規表現を試してみたところ、Rubular で動作するようです。ただし、モデルに入れるとすぐに、構文エラーが発生しました。

syntax error, unexpected $end, expecting ')'
raw_title = raw_title.gsub(/’/, "")

また、エンコードを UTF-8 に強制しようとしましたが、すべてが既に UTF-8 であり、これは効果がないようです。出力を US-ASCII に強制しようとしましたが、バイト シーケンス エラーが発生します。

また、Ruby ライブラリにあるエンコーディング オプションもいくつか試しました。これらは基本的に正規表現と同じことを行いました。

これはすべて、テスト目的で出力を一致させようとしていることに帰着します。これらの特殊文字についても心配する必要がありますか? これらの文字をやみくもに削除せずに一致させるより良い方法はありますか?

4

2 に答える 2

4

追加してみてください:

# encoding: utf-8

失敗した rspec ファイルの先頭にあります。これにより、次のようなことが保証されます。

raw_title = raw_title.gsub(/’/, "")

あなたの仕様作業で。

于 2012-09-26T07:36:04.633 に答える
0

上記の例を使用してみました。しかし、その後も失敗し続けました。そこで、iconv を使用してその特定の文字を変換しました。これは私が使ったものです

Iconv.conv('ASCII//IGNORE', 'UTF8', text_to_be_converted)

次のリンクに記載されていることを試しました-ルビーで非ASCII文字を取り除く方法

于 2013-11-14T05:37:37.537 に答える