2

私は次のバージョンのRubyを使用しています(そして固執しています):

ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux]

私はたくさんのグーグルを試しましたが、私の問題に対する有効な答えが見つかりません. 通常、ユーザーの Microsoft Excel スプレッドシートから取得される CSV ファイルをインポートしています。CSV 部分に問題はありませんが、MS の「スマート」引用符の処理方法がわかりません。テスト用の入力ファイルは DOS 形式で、次の行が含まれています。

ジャンヌ・オニール

O'Neill の O と N の間に MS のカーリー アポストロフィがあり、テキスト エディタでは「疑問符のひし形」として表示されます。次のコードを試すと、カーリー アポストロフィが削除されます。

# replace Microsoft Office 'smart' quotes

# gem to detect character encoding
require 'rchardet'
if name != nil
  cd = CharDet.detect(name)
  encoding = cd['encoding']
  name = Iconv.conv('UTF-8//TRANSLIT', encoding, name)
end

これにより、望ましくない出力が得られます。

ジャンヌ・オニール

Ruby 1.8.7 で、カーリー MS 文字を検出してストレート文字に置き換える正規表現を作成する方法はありますか? 正規表現で 16 進コードを使用しようとしましたが、機能させることができません。Ruby 1.8.7 では文字エンコーディングの処理が 1.9 よりもはるかに制限されていることは承知していますが、私はそれに固執しています。現在、このプロジェクトで Ruby をアップグレードすることはできません。

どんな助けでも大歓迎です。ありがとうございました。

TinMan によって提案された投稿を読んだ後、gsub を使用して結果の '�' 部分文字列を置き換えてみました。

if name != nil
  name = Iconv.conv("UTF-8", "cp1252//TRANSLIT", name)
  name.gsub(/\u00ef\u00bf\u00bd/u, "'")
end

悲しいかな、愛はありません。それでも同じ結果が得られます:(

4

1 に答える 1