编码Ruby-两台机器上的不同行为

编码Ruby-两台机器上的不同行为,ruby,unicode,raspberry-pi,Ruby,Unicode,Raspberry Pi,我正在尝试运行一个ruby脚本,该脚本在一个删除变音符号的函数中使用: def remove_diacritics(text) return text.tr!( "ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴ

我正在尝试运行一个ruby脚本,该脚本在一个删除变音符号的函数中使用:

def remove_diacritics(text)
return text.tr!(
"ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž",
"AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz")
end
我在开始时使用了神奇的
#编码:utf-8
,我得到了一些奇怪的行为。它在Mac上工作,但当我将完全相同的文件复制到Raspberry Pi时,我得到以下错误:

去掉发音符号。rb:28:in'tr!':不兼容的字符编码:US-ASCII和UTF-8(编码::CompatibilityError)

这似乎是一个经典的帮助论坛。令人着迷的是,它在一台机器上工作,而在另一台机器上不工作,尽管Ruby的版本完全相同,Ruby 1.9.3p286(2012-10-12修订版37165)


有什么建议吗?

这是弗雷德里克指出的。
(en)编码:
注释确定源编码,但错误是由与外部编码不匹配引起的。当作为运行时,代码会生成CompatibilityError

LANG=C ruby encoding.rb
但这两种方法都适用

LANG=cs_CZ@UTF-8 ruby         encoding.rb
LANG=C           ruby -EUTF-8 encoding.rb

请看,这是解释Ruby 1.8和1.9中Unicode情况的伟大系列文章的一部分。

您能检查文件的哈希值以确保其完全相同吗?我知道一些文件传输程序试图在机器之间移动文本文件时进行“有用的”更改(通常是换行符)-在这里似乎不太可能,但可能是这样的…是的,校验和完全相同…如果我的内存正确,除非您显式设置默认内部编码,否则它将根据区域设置环境变量为您设置(这反过来会更改从文件读取的字符串的编码)。我认为
#encoding
注释会更改编码。(没有注释,它在Mac上不起作用,所以我认为它改变了编码。)啊哈,我不明白弗雷德里克的意思,但现在我明白了。谢谢你的批准。该错误确实是由加载为非utf-8的文本引起的,这是通过对上述函数的输入使用
force_编码('utf-8')
修复的。