2

分音記号を削除する関数内で使用する ruby​​ スクリプトを実行しようとしています。

def remove_diacritics(text)
return text.tr!(
"ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž",
"AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz")
end

私は最初に魔法を持ってい# encoding: utf-8ますが、奇妙な動作をしています。Mac では動作しますが、まったく同じファイルを Raspberry Pi にコピーすると、次のエラーが発生します。

remove_diacritics.rb:28:`tr!' で: 互換性のない文字エンコーディング: US-ASCII および UTF-8 (Encoding::CompatibilityError)

これは、ヘルプ フォーラムでは定番のようです。魅力的なのは、Ruby のバージョンがまったく同じ (ruby 1.9.3p286 (2012-10-12 リビジョン 37165)) であるにもかかわらず、あるマシンでは動作し、別のマシンでは動作しないことです。

助言がありますか?

4

1 に答える 1

1

フレデリックが指摘している通りです。(en)coding:コメントによってソースエンコーディングが決まりますが、エラーは外部エンコーディングとの不一致が原因で発生します。として実行すると、コードはCompatibilityErrorを生成します

LANG=C ruby encoding.rb

しかし、これらのいずれかで動作します

LANG=cs_CZ@UTF-8 ruby         encoding.rb
LANG=C           ruby -EUTF-8 encoding.rb

Ruby1.9の3つのデフォルトエンコーディングを参照してください。これは、Ruby1.8および1.9のUnicodeの状況を説明するすばらしいシリーズの一部です。

于 2012-11-14T14:43:37.377 に答える