2013-08-24 1 views
0

У меня есть два китайских слова «果然 有 问题», которые закодированы в GB3212. Однако он ошибочно закодирован в ANSI и стал «彆  衄 恀 枙». С шестнадцатеричным редактором это B9FBC8BBD3D0CECACCE2java: как применить правую кодировку к строке java

Я хотел бы использовать java для исправления кодировки и сохранения ее в UTF-16.

Итак, я стараюсь:

  String wrongstr = "彆衄恀枙"; 
      byte[] binary = wrongstr.getBytes("BIG5"); 
      System.out.printf("%s", new String(binary, "GB2312")); 

но то, что я получаю: 果 有 问题

я использовал Notepad ++ и может видеть правильное слово?. Я не могу использовать GetBytes ("BIG5") или GetBytes ("US_ANSI") или r.getBytes ("GB2312"), чтобы получить правильный шестигранник (B9FBC8BBD3D0CECACCE2)

enter image description here

Я не знаю, что это неправильно. Пожалуйста, помогите, спасибо заранее.

+0

Есть ли какие-либо * возможность получить исходные данные вместо этого? Эти китайские символы просто не присутствуют ни в одной кодировке, совместимой с ANSI, о которой я знаю (и, конечно же, не ASCII). Не совсем понятно, что вы * получили, но это не так ... откуда взялись эти данные? –

+0

Я использовал notepad ++, текст GB3212, но формат txt хранится как ANSI, поэтому формат неправильный, как я могу исправить неправильное слово в JAVA? спасибо – manhon

+0

Я думаю, вы немного смущены тем, что кодировки на самом деле. Это не может быть как GB3212, так и ANSI ... и ANSI - это не одна кодировка, а целый ряд кодировок, которые совместимы с ASCII для первых 127 символов. Что * создает * файл в первую очередь? Если вы создаете его в Notepad ++, я предлагаю вам просто сохранить его как UTF-8 и использовать его при чтении. –

ответ

0

Я думаю, что это не ANSI, у него нет китайских символов. Big5, однако, делает:

String wrongstr = "湖馱"; 
byte[] binary = wrongstr.getBytes("Big5"); 
System.out.printf("%s", new String(binary, "GB2312")); 

Так что этот фрагмент кода дает желаемый результат.

+0

жаль, что я использовал плохой пример, я обновил свой вопрос. помогите, спасибо – manhon

+0

Это немного другая история. Вы видите знак вопроса как второй символ «поврежденного текста»? Это потому, что Big5 не имеет сопоставления для C8BB. И большой5-кодер заменил неизвестную последовательность байтов вопросительным знаком, чтобы указать на ошибку. После этого никто не может понять, что стояло на второй позиции до неправильного кодирования, информация теряется. Ваш трюк с Notepad ++ работает только потому, что он работает с исходными данными, в отличие от вашего java-кода. Таким образом, вы не можете восстановить данные таким образом из java-кода. – Jk1

Смежные вопросы