Ruby从1.8.7升级到1.9.3后的Yaml编码问题

Ruby从1.8.7升级到1.9.3后的Yaml编码问题,ruby,character-encoding,yaml,upgrade,ruby-1.9.3,Ruby,Character Encoding,Yaml,Upgrade,Ruby 1.9.3,也许你可以帮我做一个Yaml编码 我们有一个应用程序,它将数据库中序列化的某些设置存储为Yaml字符串,例如: --- quantity_units: Stunden,Tage, Monate, Pauschal, Jahre, GB, MB, Stück, Seite, SMS categories: Shirts number_schema: P-[Y4]-[CY3] 我们正在从Ruby 1.8.7迁移到Ruby 1.9.3的过程中,Yaml解析库在不同版本之间发生了变化,给我们留下了这

也许你可以帮我做一个Yaml编码

我们有一个应用程序,它将数据库中序列化的某些设置存储为Yaml字符串,例如:

---
quantity_units: Stunden,Tage, Monate, Pauschal, Jahre, GB, MB, Stück, Seite, SMS
categories: Shirts
number_schema: P-[Y4]-[CY3]
我们正在从Ruby 1.8.7迁移到Ruby 1.9.3的过程中,Yaml解析库在不同版本之间发生了变化,给我们留下了这样的解码字符串,从
Stück
Stück

我只想知道如何正确地将这些字符串转换为unicode,其余的我会处理


我不知道在1.8.7 Yaml解析器中使用的是哪种编码。

这看起来像utf8,读作iso-8895-1,并由 ruby适配器。您可能需要检查当前的区域设置和 数据库服务器的区域设置。还可以查看如果访问 直接通过控制台获取数据,并检查那里的编码。信息技术 在数据库上看起来像utf-8,但被解释为iso-8859-1 介于两者之间

如果没有任何帮助,那么有一个片段可以传递数据(和 把它写下来)


谢谢@Tass,我写了一个奇怪的方法,就像你的“#我不知道我在做什么。”

我在Ruby1.8下的Rails2.3中有一个应用程序,它与Rails3.2和Ruby1.9共享一个Mysql数据库

在rails 2.2上 当我保存一个序列化数组时,有时我会在mysql中看到“binary!”或错误格式的字符串,因此,当我使用rails 3.2显示文本时,我会出现奇怪的行为

我编写了一个方法来处理这个问题(我希望我们将迁移rails 2.3):


您使用哪种编码读取YAML文件?ruby中的
Stück
字符串采用哪种编码?默认UTF-8 ruby 1.9.3编码<代码>>“Stück”。编码#=>#
 "Stück".encode('iso-8859-1').force_encoding('utf-8') # I've no idea what I'm doing.
 # => "Stück"
def self.decode(words)
  temp_name = words || ''
  temp_name_encoding = temp_name.encoding

  if temp_name_encoding == Encoding::ASCII_8BIT
    return temp_name.encode('ASCII-8BIT').force_encoding('utf-8')
  elsif temp_name_encoding == Encoding::UTF_8
    return temp_name.encode('iso-8859-1').force_encoding('utf-8')
  else
    return temp_name
  end
rescue Encoding::UndefinedConversionError
  temp_name
end