Преобразование между ISO-8559-1 и cp1251

В моем приложении для Android используется библиотека с открытым исходным кодом, которая принимает текстовые данные только в кодировке ISO-8859-1. У меня есть несколько пользователей из Восточной Европы, которые хотели бы ввести текст в кодировке cp1251. Похоже, что это ограничение библиотеки с открытым исходным кодом, поскольку Java полностью способна поддерживать эти форматы, а также форматы Unicode.

Одним из вариантов может быть изменение библиотеки с открытым исходным кодом для поддержки нескольких наборов символов. Можно ли будет конвертировать cp1251 в ISO-8859-1, а затем обратно? Поскольку они оба являются 8-битными кодировками языка, кажется, что вы будете хранить одинаковое количество данных на уровне байтов. Однако когда библиотека с открытым исходным кодом загружает байтовые данные в строку с кодировкой ISO-8859-1, любое значение байта, отсутствующее в ISO-8859-1, вероятно, вызовет исключение.

Я не эксперт по наборам символов, но тот факт, что я не могу найти примеры кода, выполняющие это преобразование, заставляет меня поверить, что это не сработает, по крайней мере, не надежно.

1 ответ

Решение

Вы правы, что это не будет работать очень хорошо. Большинство не-ASCII символов в CP1251 отсутствует в ISO8859-1. (CP1251 - восточноевропейский, содержит много кириллических символов; ISO8859-1 - западноевропейский, содержит комбинацию акцентированных латинских символов, знаков пунктуации и символов.) Есть несколько символов, которые представлены в обоих, но так мало (и почти все они являются пунктуацией), что это, вероятно, не принесет вам пользы.

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