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

0x4*_*672 7 ruby encoding utf-8 character-encoding

如果您没有在它们之间进行转换,则(日期)时间和字符串编码的时区是没有问题的.在Ruby 1.9和2.0中,编码似乎是较旧的Ruby版本的新时区,它们只引起麻烦.Iconv已被原生编码功能所取代.如何从标准UTF-8转换为ISO-8859-1,例如用于Windows系统?在Ruby 2.0控制台中,编码功能不起作用,虽然它应该能够通过源编码转换为目标编码encode(dst_encoding, src_encoding) ? str

>> "ABC äöüÄÖÜ".encoding
=> #<Encoding:UTF-8>
>> "ABC äöüÄÖÜ".encode("UTF-8").encode("ISO-8859-1")
=> "ABC \xE4\xF6\xFC\xC4\xD6\xDC"
>> "ABC äöüÄÖÜ".encode("ISO-8859-1","UTF-8")
=> "ABC \xE4\xF6\xFC\xC4\xD6\xDC"
Run Code Online (Sandbox Code Playgroud)

我在Linux系统上使用Ruby 2.0.0(修订版41674).

Ste*_*fan 9

encode方法确实有效.

让我们用U + 00FC(ü)创建一个字符串:

uuml_utf8 = "\u00FC"       #=> "ü"
Run Code Online (Sandbox Code Playgroud)

Ruby以UTF-8编码此字符串:

uuml_utf8.encoding         #=> #<Encoding:UTF-8>
Run Code Online (Sandbox Code Playgroud)

在UTF-8中,ü表示为195 188(十进制):

uuml_utf8.bytes            #=> [195, 188]
Run Code Online (Sandbox Code Playgroud)

现在让我们将字符串转换为ISO-8859-1:

uuml_latin1 = uuml_utf8.encode("ISO-8859-1")

uuml_latin1.encoding       #=> #<Encoding:ISO-8859-1>
Run Code Online (Sandbox Code Playgroud)

在ISO-8859-1中,ü表示为252(十进制):

uuml_latin1.bytes          #=> [252]
Run Code Online (Sandbox Code Playgroud)

但是在UTF-8中252,序列无效.这就是你的终端/控制台显示替换字符" "(U + FFFD)或根本没有字符的原因.

为了显示ISO-8859-1编码字符,您还必须将终端/控制台切换为该编码.