RoR字符类正则表达式

8
我在我的Ruby on Rails应用程序中有以下代码行,它可以检查给定的字符串是否包含韩文字母:
isKorean = !/\p{Hangul}/.match(word).nil?

在控制台中它完美地运行,但是在实际应用程序中会引发语法错误:

invalid character property name {Hangul}: /\p{Hangul}/

我错过了什么,如何让它起作用?

在控制台和应用程序中,"#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" 的结果是什么? - John Douthat
1个回答

13
这是一个字符编码问题,您需要添加:
# encoding: utf-8

将正则表达式添加到你正在使用的 Ruby 文件的顶部。如果你愿意,可以使用任何字符类存在的编码代替 UTF-8。请注意,在 Ruby 2.0 中,UTF-8 现在是默认值,因此在 Ruby 2.0+ 中不需要这样做。

这被称为“魔法注释”。你可以阅读更多关于 Ruby 1.9 中编码 的信息。请注意,Rails 视图中的编码由 config.encoding 自动处理(默认情况下设置为 UTF-8 在 config/application.rb 中)。

在控制台中可能有效,因为你的终端已经设置为使用 UTF-8。


1
非常好,谢谢。我已在application.rb中设置了默认编码为UTF-8,本以为它会在整个应用程序中起作用。结果发现,我错了。 - Arnold
2
@ArnoldSakhnov 是的,那个设置只适用于视图(可能是因为Rails在呈现视图时可以设置编码,但Ruby是加载类文件等操作的程序)。 - Andrew Marshall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接