将西里尔文本转换为 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。
我尝试在 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。