2

DB 移行でいくつかのユーザー名からスラッグを作成しようとしています。

nick = nick.gsub('á','a')

éíóúñにも変更したいですeioun

そうしてもうまくいきません。

互換性のないエンコード正規表現の一致 (ASCII-8BIT 文字列を含む UTF-8 正規表現) (Encoding::CompatibilityError)

ただし、たとえば force_encoding メソッドを追加するなどして、次のようなエンコーディング エラーが常に発生します。

UTF-8 の無効なバイト シーケンス (ArgumentError)

"\xF3" ASCII-8BIT から UTF-8 (Encoding::UndefinedConversionError)

互換性のない文字エンコーディング: ASCII-8BIT および UTF-8 (Encoding::CompatibilityError)

これは、ボーカルやスペイン語の ñ 文字を変更するための gsub がある場合に発生します。

ファイルにもencoding: utf-8行があり、データは UTF-8 データベースから取得されます。しかし、何も役に立たないようです。

SOに関するいくつかの質問を見てきましたが、何をしようとしても解決しません。

ちなみにこれはRailsとは関係ありません。

4

1 に答える 1

2

最後に、Rails ActiveSupport の文字変換を使用しました。

require 'active_support/all'
v = ActiveSupport::Inflector.transliterate v.downcase
v.gsub(/[^a-z1-9]+/, '-').chomp('-')

正常に動作します。

于 2013-07-09T14:53:03.500 に答える