Ruby 1.9 - 无效的多字节字符(utf-8)

时间:2011-03-29 16:42:03

标签: ruby vim encoding utf-8 character-encoding

我有一个仅包含这两行的ruby文件:

# encoding: utf-8
puts "—"

当我使用ruby test_enc.rb运行时,它失败了:

test_enc.rb:2: invalid multibyte char (UTF-8)
test_enc.rb:2: unterminated string meets end of file

我不知道如何正确指定(emdash)的字符代码,但vim告诉我它是151, Hex 97, Octal 227。它也与ã等其他字符的方式相同,所以我怀疑它与该字符有特殊关系。 我在Windows XP上运行,我正在使用的ruby版本是:

ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32]

我觉得这里有一些非常明显的东西。有什么想法吗?

编辑:了解有关今天假设的宝贵经验 - 特别是假设您的编辑使用UTF-8而未实际检查它。糟糕!

感谢所有快速准确的回复!

再次编辑:'为utf-8正确设置vim'变得过大,与此问题无关,所以它现在是separate question

2 个答案:

答案 0 :(得分:5)

鉴于Ruby明确地提醒您注意UTF-8,我强烈怀疑您实际上还没有写出一个UTF-8文件。确保Vim(或用于创建文件的任何文本编辑器)确实设置为写出UTF-8。

请注意,在UTF-8中,任何非ASCII字符都将由多个字节表示,而不是您从Vim诊断中描述的单个字节。我建议使用二进制文件编辑器(或转储,或其他)来真正显示文本文件中的内容。有些东西还没有一些先入为主的编码概念 - 甚至没有把它想象成一个文本文件。

记事本可以让你用UTF-8写出一个文件,所以你可能想尝试一下,看看会发生什么。 (我自己没有安装Ruby,否则我会为你试试。)

答案 1 :(得分:3)

您的文件是latin1。 Ruby是对的。

emdash将被编码为两个字节,而不是UTF-8中的一个字节。