charset编码问题 - Base64到GB2312到Base64

Aru*_*run 0 java character-encoding gb2312

我试图使用base64显示和更新简化的中文(GB2312)charset,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);
Run Code Online (Sandbox Code Playgroud)

实际结果是

GB2312 =装箱时请拍照

Base64 = 6KOF566x5pe26K + 35ouN54Wn

预期的结果是

GB2312 =装箱时请拍照

Base64 = 17DP5Mqxx + vFxNXV

Ted*_*opp 8

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

String baseString=new String(base64.encode(gb2312.getBytes("GB2312")));
Run Code Online (Sandbox Code Playgroud)

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