【发布时间】:2014-10-07 20:48:45
【问题描述】:
我得到了一个 Base64 编码的字符串,我想在我的引擎中的 Java 7 上对其进行解码。 字符串是这样的:
String msg = "TwBuACAAMAAzACAATQBhAHIAIAAxADQALAAgAGEAdAAgADEAOQAyADkAaAByAHMALAAg
AFMAeQByAGkAYQBuACAAagBlAHQAcwAgAGYAaQByAGUAZAAgADEAOAAgAHIAbwBjAGsAZQB0AHMAIA
BhAHQAIABBAHIAcwBhAGwAJwBzACAAVwBhAGQAaQAgAEsAaABhAGkAcgAgAGEAbgBkACAAdABoAGUA
IAByAG8AYQBkACAAYgBlAHQAdwBlAGUAbgAgAFMAbABlAGUAdABhACAAYQBuAGQAIABuAG8AcgB0AG
gAZQByAG4AIAB0AG8AdwBuACAAbwBmACAAQQByAHMAYQBsAC0AQgBhAGEAbABiAGUAawAgAGEAcgBl
AGEALgA=";
它来自一个用 C# 编写的 Web 服务。
如果我将它粘贴到网络上的任何 Base64 解码器 中,它可以正常工作。如果我使用 apache commons decoder,它会给我一个奇怪的输出,其中每个字母后跟一个带问号的黑色菱形(参见 sreenshot):
我尝试在解码之前和转换为字符串时设置编码,但没有成功。 代码如下:
System.setProperty("file.encoding", "UTF-8");
String enc =
System.getProperty("file.encoding","UTF-8");
System.out.println(enc);
String msg = "TwBuACAAMAAzACAATQBhAHIAIAAxADQALAAgAGEAdAAgADEAOQAyADkAaAByAHMALAAg
AFMAeQByAGkAYQBuACAAagBlAHQAcwAgAGYAaQByAGUAZAAgADEAOAAgAHIAbwBjAGsAZQB0AHMAIA
BhAHQAIABBAHIAcwBhAGwAJwBzACAAVwBhAGQAaQAgAEsAaABhAGkAcgAgAGEAbgBkACAAdABoAGUA
IAByAG8AYQBkACAAYgBlAHQAdwBlAGUAbgAgAFMAbABlAGUAdABhACAAYQBuAGQAIABuAG8AcgB0A
GgAZQByAG4AIAB0AG8AdwBuACAAbwBmACAAQQByAHMAYQBsAC0AQgBhAGEAbABiAGUAawAgAGEAcgB
lAGEALgA=";
byte[] res = Base64.decodeBase64(msg);
System.out.println(new String(res, "UTF-8"));
有什么想法吗?
亲切的问候, 卡托佩特
【问题讨论】:
-
第一个问题:底层数据是用什么字符编码的?如果它是(例如)UTF-16,那么结果不会太令人惊讶,具体取决于您如何查看它......
-
如果我将你的 base64 字符串放入 this online base64 decoder 我也会在字符之间得到黑色菱形
标签: java c# base64 decode apache-commons