Проблема кодировки charset - от Base64 до GB2312 до Base64

Я пытаюсь отобразить и обновить кодировку упрощенного Китая (GB2312), используя base64, 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 ответ

Решение

Вы должны указать набор символов в вызове getBytes() когда вы конвертируете строку в кодировку GB2312:

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

В принципе (и для полной безопасности) вы должны делать это при конвертации из Base64 (str.getBytes()), но кодировка символов по умолчанию, вероятно, в порядке, поскольку кодировка base-64 использует подмножество US-ASCII. Кто знает, возможно, вы работаете на платформе, в которой кодировкой по умолчанию является EBCDIC.

Другие вопросы по тегам