我正在Windows XP上使用Ruby 1.8.6将一些数据从MS Access 2003迁移到MySQL 5.0(编写Rake任务来执行此操作)。
原来Windows字符串数据编码为windows-1252,Rails和MySQL都假定utf-8输入,因此一些字符,如撇号,正在被破坏。它们最终会变成“a”,重点在于它们之类的东西。
有没有人知道将windows-1252字符串转换为utf-8的工具,库,系统,方法,仪式,咒语或咒语?
答案 0 :(得分:10)
对于Ruby 1.8.6,看起来你可以使用Ruby Iconv,它是标准库的一部分:
根据此helpful article,您似乎至少可以从字符串中清除不需要的win-1252字符,如下所示:
ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
valid_string = ic.iconv(untrusted_string + ' ')[0..-2]
然后可能会尝试进行完全转换:
ic = Iconv.new('UTF-8', 'WINDOWS-1252')
valid_string = ic.iconv(untrusted_string + ' ')[0..-2]
答案 1 :(得分:9)
如果您使用的是Ruby 1.9 ......
string_in_windows_1252 = database.get(...)
# => "Fåbulous"
string_in_windows_1252.encoding
# => "windows-1252"
string_in_utf_8 = string_in_windows_1252.encode('UTF-8')
# => "Fabulous"
string_in_utf_8.encoding
# => 'UTF-8'
答案 2 :(得分:3)
HY,
我遇到了同样的问题。
这些提示帮助我获得了支持:
请务必检查正确的编码名称,以便正确提供转换工具。 如有疑问,您可以使用以下命令获取iconv或recode支持的编码列表:
$ recode -l
或
$ iconv -l
始终从原始文件开始,并编码样本以使用:
$ recode windows-1252..u8 < original.txt > sample_utf8.txt
或
$ iconv -f windows-1252 -t utf8 original.txt -o sample_utf8.txt
安装Ruby1.9,因为它在编码方面可以帮到你很多。即使您不在程序中使用它,也可以始终启动irb1.9会话并选择字符串以查看输出结果。 File.open在Ruby 1.9中有一个新的'mode'参数。用它! 这篇文章有很多帮助:http://blog.nuclearsquid.com/writings/ruby-1-9-encodings
File.open('original.txt', 'r:windows-1252:utf-8')
# This opens a file specifying all encoding options. r:windows-1252 means read it as windows-1252. :utf-8 means treat it as utf-8 internally.
玩得开心,发誓!
答案 3 :(得分:2)
如果要转换名为win1252file的文件,请在unix OS上运行:
$ iconv -f windows-1252 -t utf-8 win1252_file > utf8_file
你应该能够在Windows上使用cygwin做同样的事情。
答案 4 :(得分:2)
如果您在Ruby 1.9上不,并假设yhager的命令有效,您可以尝试
File.open('/tmp/w1252', 'w') do |file|
my_windows_1252_string.each_byte do |byte|
file << byte
end
end
`iconv -f windows-1252 -t utf-8 /tmp/w1252 > /tmp/utf8`
my_utf_8_string = File.read('/tmp/utf8')
['/tmp/w1252', '/tmp/utf8'].each do |path|
FileUtils.rm path
end