1

別の質問では、ウムラウテを置き換える方法を尋ねられました。受け入れられた質問は次のコードでした。

# encoding: utf-8
foo = "ich bin doch nicht blöd, mann!".gsub(/[äöü]/) do |match|
    case match
        when "ä" 'ae'
        when "ö" 'oe'
        when "ü" 'ue'
    end
end
puts foo

ただし、これを実行しようとすると、出力は次のようになります。

$ ruby /tmp/test.rb 
ich bin doch nicht bld, mann!

したがって、ウムラウテは明らかに交換されません。足りないものはありますか?Ruby 1.9.3p362 (2012-12-25 リビジョン 38607) [x86_64-linux] を使用しています。

4

3 に答える 3

7

間違った構文を使用していますthen。または改行とインデントを使用する必要があります。

# encoding: utf-8
foo = "ich bin doch nicht blöd, mann!".gsub(/[äöü]/) do |match|
    case match
        when "ä" then 'ae'
        when "ö" then 'oe'
        when "ü" then 'ue'
    end
end

puts foo

また

# encoding: utf-8
foo = "ich bin doch nicht blöd, mann!".gsub(/[äöü]/) do |match|
    case match
        when "ä"
            "ae"
        when "ö"
            "oe"
        when "ü"
            "ue"
    end
end

これを行うための堅牢な方法は、ac 拡張子なしでは ruby​​ で実行できないresult = Iconv.iconv('ascii//ignore//translit', 'utf-8', foo)ロケールを設定する必要があります。"de_DE"

于 2013-01-11T22:22:10.423 に答える
2
"ich bin doch nicht blöd, mann!".gsub("ä","ae").gsub("ö","oe").gsub("ü","ue")

トリックを行う必要があります

于 2013-01-11T22:19:53.827 に答える
2

(質問に対する本当の答えではありませんが、コメントには少し大きいです。)gsubには、ハッシュを使用したこの種の置換の構文があります。

#encoding: utf-8
table = {"ä" => 'ae',
         "ö" => 'oe',
         "ü" => 'ue'}
re = Regexp.union(table.keys)
# re = /[äöü]/ # is fine too
p "ich bin doch nicht blöd, mann!".gsub(re, table)
# => "ich bin doch nicht bloed, mann!"
于 2013-01-11T22:48:04.320 に答える