Согласно этой документации (http://java.sun.com/docs/books/jls/third_edition/html/lexical.html, 3.10.6) OctalEscape будет преобразован в символ Unicode.Теперь у меня есть проблема, что следующий код приведет к 2-байтовому символу Unicode с неверной информацией.
for (byte b : "\222".getBytes()) {
System.out.format("%02x ", b);
}
Результат - "c2 92".Я объяснил только «92», потому что это будет преобразованное значение из 222 восьмеричного в гекс (92).Если я проверю это с символом, информация о байтах будет правильной.
System.out.format("%02x ", (byte)'\222');
Результат - «92» для одного байта ». Моя кодировка по умолчанию -« UTF-8 »в Linux с Java / c 1.6.0_18.
История моего вопроса в том, что я ищу метод для преобразования восьмеричной строки из входной кодировки Cp1252 в UTF-8. Это не удается из-за преобразования восьмеричной строки с экранированиемдо 2 байтов. Кто-нибудь знает, почему в массив char всегда добавляется дополнительный байт "c2"? Простой подсчет показывает, что в массиве есть только один символ.
System.out.println("\222".toCharArray().length); // will result in "1"
Спасибодля ваших подсказок.
Обновление: Как упомянул BalusC, восьмеричное экранированное значение интерпретируется как значение UTF-8, что приводит к проблеме. Пока это значение сохраняется в исходном коде (UTF-8)нет возможности читать в этой строке с другой кодировкой. Я прав? Если я читаю файл в кодировке Cp1252, я должен объявить кодировку InputReader с правильной кодировкой и выполнить кодировку дляUTF-8 для обработки и сохранения прочитанного содержимого как UTF-8.