如何在Ruby中将字符串从windows-1252转换为utf-8?

Eth*_*han 9 ruby windows ms-access encoding character-encoding

我正在使用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的工具,库,系统,方法,仪式,咒语或咒语?

aus*_*ton 10

对于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]
Run Code Online (Sandbox Code Playgroud)

然后可能会尝试进行完全转换,如下所示:

ic = Iconv.new('UTF-8', 'WINDOWS-1252')
valid_string = ic.iconv(untrusted_string + ' ')[0..-2]
Run Code Online (Sandbox Code Playgroud)


Jam*_*sen 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'
Run Code Online (Sandbox Code Playgroud)

  • 我当然希望ruby不会将"Fåbulous"编码为"Fabulous",因为对于任何体育它的语言来说,'å'与'a'是非常不同的角色.如果UTF-8编码的字符串将在Windows 1252代码页中打印,则字符串应该看起来像"FÃ¥bulous",如果以UTF-8打印,则应该是"Fåbulous". (3认同)