ruby - 为什么这个 Unicode gsub 替换在 Ruby 中不起作用?

标签 ruby unicode

another question有人问如何替换 Umlaute。接受的问题是以下代码:

# 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]

最佳答案

您使用的语法不正确,您需要使用 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

执行此操作的可靠方法是 result = Iconv.iconv('ascii//ignore//translit', 'utf-8', foo) 但您需要将语言环境设置为 "de_DE" 在没有 c 扩展名的情况下无法在 ruby​​ 中完成。

关于ruby - 为什么这个 Unicode gsub 替换在 Ruby 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287585/

相关文章:

ruby-on-rails - Rails 应用程序启动上的队列 Sidekiq 作业

ruby-on-rails - Rspec 测试比较<=>

http - 关于 URL UTF-8 编码,浏览器或 Web 服务器正在做什么 "behind the scenes"?

ruby - 如何检查参数是否为 Symbol?

ruby-on-rails - 使用相同的字符串作为符号、实例变量和属性重构 Rails Controller 代码

ios - iOS 中的轻微皱眉脸 unicode

xml - 如何去除 XSL 中字符的重音符号?

java - 如何编译编码为 "UTF-8"的 java 源文件?

ruby-on-rails - 使用 Mina 和 Foreman 正确部署 Rails 应用程序

c++ - _tcsnicmp 和 _tcsncicmp 有什么区别?