Проблема кодировки 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.