Как перекодировать заглавную букву И в юникод

При перекодировании текста с кириллицей из кодировки WIN1251 в UTF-8 буква И становится нечитаемой последовательностью символов, которая начинается ромбиком со знаком вопроса. Это проблема не джавы, насколько я понимаю, а именно совместимости кодировок. Т.к. остальные кириллические символы перекодируются нормально. Далее будет показан workaround.

Решение заключается в том, что в исходной строке в кодировке WIN-1251 надо заменить большую букву «И» на маркер __MARKER_I__, который не исказится при перекодировании и при этом не встречается в тексте сам по себе. Это важно из-за того, что маркер после перекодирования будет заменен на И, если бы он встречался в исходном тексте, то будут незапланированные замены. Иными словами, во время перекодирования в строке просто не будет буквы И. Код:

String ENCODING_TO_BE_APPLIED = "windows-1251";
String MARKER = "__MARKER_I__";
try {
    String CYRILLIC_I = new String("И".getBytes("UTF-8"), ENCODING_TO_BE_APPLIED);
    content = content.replace(CYRILLIC_I, MARKER);
    content = new String(content.getBytes(ENCODING_TO_BE_APPLIED), "UTF-8");
    content = content.replace(MARKER, "И");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
В переменной CYRILLIC_I хранится представление буквы И в кодировке win1251.

You can leave a response, or trackback from your own site.

Leave a Reply