charset编码问题 - Base64到GB2312到Base64

时间:2012-12-28 20:58:10

标签: java character-encoding gb2312

我正在尝试使用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

1 个答案:

答案 0 :(得分:8)

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

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

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