在Ruby中,如何将string从windows-1252转换为utf-8?

我正在使用Windows XP上的Ruby 1.8.6将一些数据从MS Access 2003迁移到MySQL 5.0(编写一个Rake任务来完成)。

事实certificate,Windows的string数据被编码为windows-1252,而Rails和MySQL都采用utf-8input,因此一些字符(如撇号)正在被破坏。 他们像“a”一样带着口音和他们的口音。

有谁知道一个工具,库,系统,方法,仪式,拼写或咒语将Windows-1252string转换为UTF-8?

Solutions Collecting From Web of "在Ruby中,如何将string从windows-1252转换为utf-8?"

对于Ruby 1.8.6,似乎可以使用Ruby Iconv,这是标准库的一部分:

Iconv文档

根据这个有用的文章 ,看来你至少可以从你的字符串中清除不需要的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] 

如果你在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' 

HY,

我有同样的问题。

这些提示帮助我得到了布莱恩:

始终检查正确的编码名称,以便正确地提供转换工具。 有疑问,你可以得到一个支持的编码列表或重新编码使用:

 $ 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中有一个新的“模式”参数。 用它! 这篇文章帮助了很多: 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. 

玩得开心,发誓!

如果要在unix操作系统上转换名为win1252file的文件,请运行:

 $ iconv -f windows-1252 -t utf-8 win1252_file > utf8_file 

你应该可以用cygwin在Windows上做同样的事情。

如果你不在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