Ruby 1.8和UTF-8字符串case语句比较

时间:2008-12-09 16:16:01

标签: ruby-on-rails ruby utf-8 ruby-1.8

我有一个Rake任务(在lib / tasks目录中),我在共享的虚拟主机上使用cron运行。问题是我想使用案例陈述来比较UTF-8字符串,但我的源代码不是UTF-8编码的。如果我将源代码保存为UTF-8,则在尝试启动它时会出错:(

我该怎么办?

可以从外部UTF-8 txt文件读取这个字符串吗?

P.S。我正在使用Ruby 1.8

P.S。我的意思是这样比较:

result = case utf8string
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end

3 个答案:

答案 0 :(得分:2)

我发现我的问题不是法案

问题在于,当我以UTF-8格式保存源代码时,我的文本编辑器在开头添加3个字节(BOM),表示编码为UTF-8。

  

问:什么是BOM?

     

A:字节顺序标记(BOM)由字符代码组成   U + FEFF位于数据流的开头,可用作数据流   定义字节顺序和编码形式的签名,主要是未标记的   明文文件。在某些更高级别的协议下,可以使用BOM   在该协议中定义的Unicode数据流中强制(或禁止)。

UTF-8, UTF-16, UTF-32 & BOM

我得到的错误是:

1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression

答案 1 :(得分:1)

我说你需要更改文本编辑器,因为UTF-8需要 。 UTF-8不依赖于字节顺序。有关详细信息,请参阅link text

答案 2 :(得分:0)

尝试使用Rails'ActiveSupport框架中的mb_chars方法:

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end