将西里尔文本转换为 Base64 并返回

Convert cyrillic text to Base64 and back

我尝试在 Base64 之间编码和解码西里尔文本:

cyrillic_text = "Какой-то русский текст"
base64 = Base64.encode64 cyrillic_text
inverse = Base64.decode64 base64

结果是:

"\xD0\x9A\xD0\xB0\xD0\xBA\xD0\xBE\xD0\xB9-\xD1\x82\xD0\xBE \xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB9 \xD1\x82\xD0\xB5\xD0\xBA\xD1\x81\xD1\x82"

为什么?如何将编码文本转换回初始状态?

inverse.encode "UTF-8"
Encoding::UndefinedConversionError: "\xD0" from ASCII-8BIT to UTF-8
    from (irb):93:in `encode'
    from (irb):93
    from /home/alexk/rubystack-2.2.7-2/ruby/bin/irb:11:in `<main>'
cyrillic_text = "Какой-то русский текст"
base64 = Base64.encode64 cyrillic_text
inverse = Base64.decode64(base64).force_encoding(Encoding::UTF_8)
#⇒ "Какой-то русский текст"

经过 Base64 解码后,它只是一个字节序列,Ruby不知道如何解释它。应该明确指示 Ruby 使用 UTF8 编码,因为它最初是 UTF8 编码的字符串。

您最初对 String#encode 的尝试没有成功,因为它确实已经是 UTF-8 编码的字符串,再次调用 encode 就把它搞砸了。唯一需要的是告诉 Ruby 它是 UTF8。