19

Unicode字符可以用Base64编码和解码吗?

我试图对字符串'الله'进行编码,但是当我解码它时,我得到的只是'????'。

4

4 回答 4

22

Base64 将二进制转换为文本。如果您想将文本转换为 base64 格式,您需要先使用一些适当的编码(例如 UTF-8、UTF-16)将文本转换为二进制。

于 2008-11-20T12:40:16.993 回答
17

他们当然可以。这取决于您的语言或 Base64 例程如何处理 Unicode 输入。例如,Python 的b64例程需要一个编码字符串(因为 Base64 将二进制编码为文本,而不是将 Unicode 代码点编码为文本)。

Python 2.5.1 (r251:54863, Jul 31 2008, 22:53:39)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'ûñö'
>>> import base64
>>> base64.b64encode(a)
'w7vDscO2'
>>> base64.b64decode('w7vDscO2')
'\xc3\xbb\xc3\xb1\xc3\xb6'
>>> print '\xc3\xbb\xc3\xb1\xc3\xb6'
ûñö
>>>     
>>> u'üñô'
u'\xfc\xf1\xf4'
>>> base64.b64encode(u'\xfc\xf1\xf4')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/base64.py", line 53, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
UnicodeEncodeError: 'ascii' codec can't encode characters in position
0-2: ordinal not in range(128)
>>> base64.b64encode(u'\xfc\xf1\xf4'.encode('utf-8'))
'w7zDscO0'
>>> base64.b64decode('w7zDscO0')
'\xc3\xbc\xc3\xb1\xc3\xb4'
>>> print base64.b64decode('w7zDscO0')
üñô
>>> a = 'الله'
>>> a
'\xd8\xa7\xd9\x84\xd9\x84\xd9\x87'
>>> base64.b64encode(a)
'2KfZhNmE2Yc='
>>> b = base64.b64encode(a)
>>> print base64.b64decode(b)
الله
于 2008-11-20T12:36:20.963 回答
2

您没有指定您正在使用哪种语言,但尝试将字符串转换为字节数组(但是这是用您选择的语言完成的),然后对该字节数组进行 base64 编码。

于 2008-11-20T13:04:24.090 回答
2

在 .NET 中,你可以试试这个(编码):

byte[] encbuf;

encbuf = System.Text.Encoding.Unicode.GetBytes(input);
string encoded = Convert.ToBase64String(encbuf);

...并解码:

byte[] decbuff;

decbuff = Convert.FromBase64String(this.ToString());
string decoded = System.Text.Encoding.Unicode.GetString(decbuff);
于 2010-03-28T19:48:50.347 回答