解决操作yaml文件时出现类似「"\xE5" from ASCII-8BIT to UTF-8」的问题

前略,某系统的数据是这样产生的
1)在rake中通过nokogiri来收集数据,然后把数据写入到一个yaml文件中
2)读取该yaml文件把数据写入数据库

结果在第一步的时候就遇到了非常悲催的「”\xE5” from ASCII-8BIT to UTF-8」,fml

解决方法:
写入文件的时候指定外部编码跟内部编码

1
2
3
File.open("file.yml", 'w:ASCII-8BIT:utf-8') do |file|
YAML.dump(array, file)
end

or

1
2
3
4
File.open("file.yml", 'w') do |file|
file.set_encoding("ASCII-8BIT:utf-8")
YAML.dump(array, file)
end

Done

扩展:
1)按照请教ruby怎么往MySQL里插中文里面的13楼所介绍的方法也不好用,不过5楼倒是给出了原因
2)在双飞燕这本书的p358-p389有该详细介绍