Ruby将字符串编码从ISO-8859-1转换为UTF-8无效

夏琳

我正在尝试将字符串从ISO-8859-1编码转换为UTF-8,但似乎无法正常工作。这是我在irb中所做的一个示例。

irb(main):050:0> string = 'Norrlandsvägen'
=> "Norrlandsvägen"
irb(main):051:0> string.force_encoding('iso-8859-1')
=> "Norrlandsv\xC3\xA4gen"
irb(main):052:0> string = string.encode('utf-8')
=> "Norrlandsvägen" 

我不知道为什么Norrlandsvägen在ISO-8859-1将被转换成Norrlandsvägen在UTF-8。

我尝试了编码,编码!,编码(destinationEncoding,originalEncoding),iconv,force_encoding和我能想到的各种怪异的解决方法,但似乎没有任何效果。有人可以帮我/指出正确的方向吗?

Ruby新手仍然像疯了似的拔头发,但对这里的所有回复表示感谢... :)

这个问题的背景:我正在编写一个gem,它将从某些网站(具有iso-8859-1编码)下载xml文件并将其保存在存储中,我想先将其转换为utf-8。但是像Norrlandsvägen这样的词总是让我感到困惑真的,任何帮助将不胜感激!

[更新]:我意识到在irb控制台中运行这样的测试可能会给我带来不同的行为,所以这就是我的实际代码中的内容:

def convert_encoding(string, originalEncoding) 
  puts "#{string.encoding}" # ASCII-8BIT
  string.encode(originalEncoding)
  puts "#{string.encoding}" # still ASCII-8BIT
  string.encode!('utf-8')
end

但最后一行给我以下错误:

Encoding::UndefinedConversionError - "\xC3" from ASCII-8BIT to UTF-8

感谢以下@Amadan的回答,我注意到,\xC3如果您运行,它实际上会显示在irb中:

irb(main):001:0> string = 'ä'
=> "ä"
irb(main):002:0> string.force_encoding('iso-8859-1')
=> "\xC3\xA4"

我还尝试为结果分配一个新变量,string.encode(originalEncoding)但出现了一个甚至更奇怪的错误:

newString = string.encode(originalEncoding)
puts "#{newString.encoding}" # can't even get to this line...
newString.encode!('utf-8')

错误是 Encoding::UndefinedConversionError - "\xC3" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to ISO-8859-1

我仍然迷失在所有这些编码混乱中,但是我非常感谢所有答复,并感谢大家给我的帮助!万分感谢!:)

阿玛丹

您以UTF-8分配一个字符串。它包含äUTF-8ä用两个字节表示

string = 'ä'
string.encoding
# => #<Encoding:UTF-8>
string.length
# 1
string.bytes
# [195, 164]

然后,您可以强制将字节解释为好像它们是ISO-8859-1,而无需实际更改基础表示。这不再包含ä任何内容。它包含两个字符,ä

string.force_encoding('iso-8859-1')
# => "\xC3\xA4"
string.length
# 2
string.bytes
# [195, 164]

然后,您将其翻译为UTF-8由于这不是重新解释而是翻译,因此您保留了两个字符,但是现在使用UTF-8进行编码:

string = string.encode('utf-8')
# => "ä" 
string.length
# 2
string.bytes
# [195, 131, 194, 164]

您所缺少的是,您实际上没有像从Web服务中那样获得ISO-8859-1字符串的事实-您有胡言乱语。幸运的是,这一切都在控制台测试中。如果您使用正确的输入编码读取了网站的回复,则一切正常。

对于您的控制台测试,让我们演示一下,如果您以正确的ISO-8859-1字符串开头,那么所有操作都可以:

string = 'Norrlandsvägen'.encode('iso-8859-1')
# => "Norrlandsv\xE4gen"
string = string.encode('utf-8')
# => "Norrlandsvägen"

编辑对于您的特定问题,这应该工作:

require 'net/https'
uri = URI.parse("https://rusta.easycruit.com/intranet/careerbuilder_se/export/xml/full")
options = {
  :use_ssl => uri.scheme == 'https', 
  :verify_mode => OpenSSL::SSL::VERIFY_NONE
}
response = Net::HTTP.start(uri.host, uri.port, options) do |https|
  https.request(Net::HTTP::Get.new(uri.path))
end
body = response.body.force_encoding('ISO-8859-1').encode('UTF-8')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript将字符串从utf-8转换为iso-8859-1

来自分类Dev

从UTF8转换为ISO 8859-5,改为获取ISO 8859-1

来自分类Dev

将字符从ISO-8859-1转换为Javascript中的UTF-8编码时,保持字符表示

来自分类Dev

将iso-8859-1转换为utf-8 javascript

来自分类Dev

将SQL Server中的文本值从UTF8转换为ISO 8859-1

来自分类Dev

将ISO-8859-1转换为utf-8(øæå)

来自分类Dev

使用Dart语言将字符串从ISO-8859-2转换为UTF-8

来自分类Dev

使用Dart语言将字符串从ISO-8859-2转换为UTF-8

来自分类Dev

jQuery或Javascript:从ISO-8859-1转换为utf8

来自分类Dev

在Delphi中将UTF8转换为ANSI(ISO-8859-1)

来自分类Dev

如何在Ruby 2.0中将UTF-8转换为ISO-8859-1?

来自分类Dev

从utf8转换为iso-8859-1后未显示丹麦语字符

来自分类Dev

Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

来自分类Dev

从UTF-8转换为ISO8859-1并重新转换为UTF-8后,符号会丢失

来自分类Dev

将UTF-8转换为ISO-8859-2(抛光)

来自分类Dev

从ISO-8859-1转换大型XML为UTF-8与外部DTD实体

来自分类Dev

从UTF-8转换为ISO-8859-15时,哪些双引号字符会自动替换?

来自分类Dev

字符编码问题-UTF8 / iso-8859-1

来自分类Dev

从 UTF8 转换为 ISO-8859-1 不起作用

来自分类Dev

将文字编码不正确的字符串(例如,“±”)转换为ISO-8859-1(Latin1)H

来自分类Dev

如何将ISO-8859-1字符正确替换为UTF-8?

来自分类Dev

将UTF-8转换为字符串

来自分类Dev

将(txt | srt)文档从Western(ISO-8859-15)转换为UTF-8

来自分类Dev

从 Linux 终端将 ISO-8859-7 转换为 utf-8 而无需 bom

来自分类Dev

如何将 iso8859_6 中的文件名转换为 utf-8?

来自分类Dev

从ISO-8859-2转换为ORACLE字符集AL16UTF16

来自分类Dev

如何从C中的八进制ISO-8859-1转储utf8

来自分类Dev

如何在C ++中将ISO-8859-7字符串“转换”为UTF-8?

来自分类Dev

从浏览器发布的字符编码为“ iso-8859-1”,但应为“ UTF-8”

Related 相关文章

  1. 1

    Javascript将字符串从utf-8转换为iso-8859-1

  2. 2

    从UTF8转换为ISO 8859-5,改为获取ISO 8859-1

  3. 3

    将字符从ISO-8859-1转换为Javascript中的UTF-8编码时,保持字符表示

  4. 4

    将iso-8859-1转换为utf-8 javascript

  5. 5

    将SQL Server中的文本值从UTF8转换为ISO 8859-1

  6. 6

    将ISO-8859-1转换为utf-8(øæå)

  7. 7

    使用Dart语言将字符串从ISO-8859-2转换为UTF-8

  8. 8

    使用Dart语言将字符串从ISO-8859-2转换为UTF-8

  9. 9

    jQuery或Javascript:从ISO-8859-1转换为utf8

  10. 10

    在Delphi中将UTF8转换为ANSI(ISO-8859-1)

  11. 11

    如何在Ruby 2.0中将UTF-8转换为ISO-8859-1?

  12. 12

    从utf8转换为iso-8859-1后未显示丹麦语字符

  13. 13

    Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

  14. 14

    从UTF-8转换为ISO8859-1并重新转换为UTF-8后,符号会丢失

  15. 15

    将UTF-8转换为ISO-8859-2(抛光)

  16. 16

    从ISO-8859-1转换大型XML为UTF-8与外部DTD实体

  17. 17

    从UTF-8转换为ISO-8859-15时,哪些双引号字符会自动替换?

  18. 18

    字符编码问题-UTF8 / iso-8859-1

  19. 19

    从 UTF8 转换为 ISO-8859-1 不起作用

  20. 20

    将文字编码不正确的字符串(例如,“±”)转换为ISO-8859-1(Latin1)H

  21. 21

    如何将ISO-8859-1字符正确替换为UTF-8?

  22. 22

    将UTF-8转换为字符串

  23. 23

    将(txt | srt)文档从Western(ISO-8859-15)转换为UTF-8

  24. 24

    从 Linux 终端将 ISO-8859-7 转换为 utf-8 而无需 bom

  25. 25

    如何将 iso8859_6 中的文件名转换为 utf-8?

  26. 26

    从ISO-8859-2转换为ORACLE字符集AL16UTF16

  27. 27

    如何从C中的八进制ISO-8859-1转储utf8

  28. 28

    如何在C ++中将ISO-8859-7字符串“转换”为UTF-8?

  29. 29

    从浏览器发布的字符编码为“ iso-8859-1”,但应为“ UTF-8”

热门标签

归档