Java Can';t base64正确解码utf-8特殊字符
我有一个与Python后端通信的Android应用程序。它发送一个base64编码的字符串,Python服务器对其进行解码。目前,它可以处理0-9个A-z字符,但如果我输入Aæ、ø或其他特殊字符,整个输出都会乱码。我猜想这是一个编码问题,但我不太明白我做错了什么 爪哇: 和蟒蛇Java Can';t base64正确解码utf-8特殊字符,java,android,python,encoding,Java,Android,Python,Encoding,我有一个与Python后端通信的Android应用程序。它发送一个base64编码的字符串,Python服务器对其进行解码。目前,它可以处理0-9个A-z字符,但如果我输入Aæ、ø或其他特殊字符,整个输出都会乱码。我猜想这是一个编码问题,但我不太明白我做错了什么 爪哇: 和蟒蛇 subject = base64.b64decode(subject) body = base64.b64decode(body).decode('UTF-8') 有人能看到这里有什么问题吗 在Java方面,如果我发送
subject = base64.b64decode(subject)
body = base64.b64decode(body).decode('UTF-8')
有人能看到这里有什么问题吗
在Java方面,如果我发送以下文本,一切都很好
input = "[Mar 6 - 15:45:5] hello world"
output = "W01hciA2IC0gMTU6NDU6NV0gaGVsbG8gd29ybGQKQmF0dGVyeTogNTAuMCU="
但是,以下方法不起作用
input = "[Mar 6 - 15:46:54] hello wørld"
Python对其进行解码时,会得到以下结果:
[Mar 6 - 15:46:54] ᘀ栀攀氀氀漀 眀爀氀
它被编码为请包含显示问题的示例数据好吗?原始字符串的确切性质是什么,base64版本是什么,Python到底显示了什么?您应该在每个阶段跟踪准确的数据,以便找出问题所在。(顺便说一句,对于base64版本和原始文本都使用
text
变量是没有帮助的;如果找不到UTF-8,只返回原始文本也是没有帮助的。)我可以在那里看到UTF-16字节的文本hello wørld
。您未能在某个位置将其正确编码为UTF-8。>>打印u“ᘀ栀攀氀氀漀 眀爀氀".encode('utf-16-be')。decode('utf-16-le')
产生hello wrl
。因此,utf-16字节顺序被交换,一些数据丢失,但您明白了。因为是Java作为utf-16在内部处理Unicode数据,所以这个问题完全在Java方面。
[Mar 6 - 15:46:54] ᘀ栀攀氀氀漀 眀爀氀