2

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

我必须做什么?

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

PS我正在使用Ruby 1.8

PS我的意思是这样比较:

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

3 回答 3

2

我发现我的问题不是案例陈述

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

问:什么是 BOM?

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

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
于 2008-12-10T08:34:27.077 回答
1

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

于 2008-12-11T09:57:48.687 回答
0

尝试使用mb_charsRails 的ActiveSupport框架中的方法:

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
于 2008-12-09T21:18:39.920 回答