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

时间:2012-11-13 20:32:45

标签: ruby unicode raspberry-pi

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

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

我在开始时有魔法# encoding: utf-8而且我有一些奇怪的行为。它适用于Mac,但当我将完全相同的文件复制到Raspberry Pi时,我收到此错误:

  

remove_diacritics.rb:28:in`tr!':不兼容的字符编码:US-ASCII和UTF-8(Encoding :: CompatibilityError)

这似乎是帮助论坛中的经典之作。令人着迷的是,它确实可以在一台机器上运行,而不是在另一台机器上运行,即使Ruby的版本完全相同,ruby 1.9.3p286(2012-10-12修订版37165)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

正如弗雷德里克指出的那样。 (en)coding:注释确定编码,但错误是由与外部编码不匹配引起的。您的代码在

运行时会产生CompatibilityError
LANG=C ruby encoding.rb

但适用于其中任何一种

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

参见Ruby 1.9's Three Default Encodings,这是一个很好的系列文章的一部分,解释了Ruby 1.8和1.9中的Unicode情况。