我正在尝试运行一个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)。
有什么建议吗?
答案 0 :(得分:1)
正如弗雷德里克指出的那样。 (en)coding:
注释确定源编码,但错误是由与外部编码不匹配引起的。您的代码在
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情况。