2

我正在尝试运行一个在删除变音符号的函数内部使用的 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)。

有什么建议么?

4

1 回答 1

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 的三种默认编码,这是解释 Ruby 1.8 和 1.9 中 Unicode 情况的精彩系列的一部分。

于 2012-11-14T14:43:37.377 回答