基于Unicode字符

基于Unicode字符,unicode,base64,Unicode,Base64,字符可以用编码和解码吗 我曾尝试对字符串“اله”进行编码,但当我解码它时,我得到的是“??”。他们当然可以。这取决于您的语言或Base64例程如何处理Unicode输入。例如,Python的b64例程需要一个编码字符串(因为Base64将二进制编码为文本,而不是Unicode代码点编码为文本) Python2.5.1(r251:54863,2008年7月31日,22:53:39) linux2上的[GCC 4.1.2(Ubuntu 4.1.2-0ubuntu4)] 有关详细信息,请键入“帮助”

字符可以用编码和解码吗


我曾尝试对字符串“اله”进行编码,但当我解码它时,我得到的是“??”。

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

Python2.5.1(r251:54863,2008年7月31日,22:53:39)
linux2上的[GCC 4.1.2(Ubuntu 4.1.2-0ubuntu4)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>a=‘āñö’
>>>导入base64
>>>base64.b64编码(a)
“w7vDscO2”
>>>base64.b64解码('w7vDscO2')
“\xc3\xbb\xc3\xb1\xc3\xb6”
>>>打印“\xc3\xbb\xc3\xb1\xc3\xb6”
ûñö
>>>     
>>>u‘üñô’
u'\xfc\xf1\xf4'
>>>base64.b64编码(u'\xfc\xf1\xf4')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
b64encode中的文件“/usr/lib/python2.5/base64.py”,第53行
encoded=binascii.b2a_base64[:-1]
UnicodeEncodeError:“ascii”编解码器无法对位置中的字符进行编码
0-2:序号不在范围内(128)
>>>base64.b64encode(u'\xfc\xf1\xf4'.encode('utf-8'))
“W7ZDSC0”
>>>base64.b64解码('W7ZDSC0')
“\xc3\xbc\xc3\xb1\xc3\xb4”
>>>打印base64.b64解码('W7ZDSC0')
üñô
>>>a=‘اله’
>>>a
“\xd8\xa7\xd9\x84\xd9\x84\xd9\x87”
>>>base64.b64编码(a)
“2KfZhNmE2Yc=”
>>>b=base64.B64编码(a)
>>>打印base64.b64解码(b)
الله

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

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

在.NET中,您可以尝试以下方法(编码):

…并解码:

byte[] decbuff;

decbuff = Convert.FromBase64String(this.ToString());
string decoded = System.Text.Encoding.Unicode.GetString(decbuff);

这将取决于Base64例程如何获取数据,平台和代码是什么?答案是肯定的,他们当然可以。数据在Delphi中编码,在PHPSorry中解码/使用,对Delphi没有任何线索。但我提供了一个答案,证明这个问题与Base64无关,尽管它可能是如何在PHP上解码的。你不能用代码提供一个实际的例子吗?Unicode问题可能很棘手,尤其是跨语言/平台对于PHP方面,我使用的是内置的base64_解码函数。我要注意的是,返回的字符串不是Unicode对象。它应该被解码如下:c=base64.b64解码(b)。解码('utf-8')@think123:哪个位?无论如何,我不太可能知道,也不知道PHP,但将任务分解成若干位可能会帮助您通过搜索找到答案。主要是使用UTF-8将文本转换为二进制。@think123我怀疑搜索“PHP文本UTF-8”会得到很多结果。如果你在阅读后没有任何进展,我建议你问一个新问题。我确实找到了一个解决方案-只需
utf8\u解码
base64\u解码后的字符串
ing a
base64\u编码
d
utf8\u编码
d字符串。仅供将来参考。
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);