也许你可以帮助我进行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
到{{1}为我们留下了这样的解码字符串}。
我只想知道如何将这些字符串正确转换为unicode,我会处理其余的事情。
我不知道在1.8.7 Yaml解析器中使用了哪种编码。
答案 0 :(得分:4)
这看起来像utf8读取为iso-8895-1,并被解释为utf-8 红宝石适配器。您可能想要检查当前的区域设置和 数据库服务器的区域设置。另请参阅访问该文件时会发生什么 数据直接通过控制台,并检查那里的编码。它 看起来像数据库上的utf-8,但被解释为iso-8859-1 介于两者之间。
如果没有任何帮助,那么会有一个片段来传递您的数据(和 把它写回去。)
"Stück".encode('iso-8859-1').force_encoding('utf-8') # I've no idea what I'm doing.
# => "Stück"
答案 1 :(得分:-1)
谢谢@Tass,我写了一个奇怪的方法,比如你的“#我不知道我在做什么。”
我在ruby 1.8下的rails 2.3中有一个应用程序,它与rails 3.2和ruby 1.9共享一个Mysql数据库
在轨道上2.2 当我保存序列化数组时,有时我可以在mysql中看到“二进制!”或者我的字符串格式错误,因此,当我用rails 3.2显示文本时,我的行为很奇怪。
我写了一个方法来处理这个问题(我希望我们将迁移rails 2.3):
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