0

我正在尝试使用 base64 显示和更新简体中文(GB2312)字符集,Base64 到 GB2312 工作正常,但我无法将 GB2312 转换为 base64

String str="17DP5Mqxx+vFxNXV";
Base64 base64=new Base64();
String gb2312=new String(base64.decode(str.getBytes()),"GB2312");
System.out.println("GB2312 = "+gb2312);

String baseString=new String(base64.encode(gb2312.getBytes()));
System.out.println("Base64 = "+baseString);

实际结果是

GB2312 = 装箱时请拉客

Base64 =6KOF566x5pe26K+35ouN54Wn

预期结果是

GB2312 = 装箱时请拉客

Base64 = 17DP5Mqxx+vFxNXV

4

1 回答 1

8

getBytes()将字符串转换为其 GB2312 编码时,应在调用中指定字符集:

String baseString=new String(base64.encode(gb2312.getBytes("GB2312")));

原则上(并且为了完全安全)您应该在从 Base64 ( str.getBytes()) 转换时执行此操作,但默认字符编码可能没问题,因为 base-64 编码使用 US-ASCII 的子集。谁知道——您可能在默认编码为 EBCDIC 的平台上运行。

于 2012-12-28T21:03:53.733 回答