Как преобразовать UTF-16 в ISO / IEC 8859-1 Latin на Java с адекватной заменой специальных букв?

Мне нужно преобразовать строки Java в ISO / IEC 8859-1, чтобы сэкономить место / сделать каждый символ использованием 1 байта.

Однако при использовании

getBytes(StandardCharsets.ISO_8859_1)

некоторые символы, такие как š и ž, позже печатаются как ?. Они не являются частью ISO / IEC 8859-1, но я хотел бы иметь автоматический способ адекватной замены этих букв, например: š-->s, ž-->z, для каждой буквы UTF-16, которая не является частью ISO / IEC 8859-1. .

Возможно ли такое?

РЕДАКТИРОВАТЬ: Я использовал решение Эрика Робертсона.

https://stackoverflow.com/a/3322174/10197944


person noob13    schedule 24.09.2018    source источник
comment
Да, такое возможно. Что может быть не, так это найти готовое решение в Интернете: вам, возможно, придется запрограммировать его для себя.   -  person Kevin Anderson    schedule 24.09.2018
comment
Это должно быть возможно, на самом деле мы работаем над аналогичной проблемой atm. Что-то на основе это должно работать в большинстве случаев. Могут быть случаи, когда это не работает (мы испытываем трудности с лигатурами, такими как œ, но их не должно быть слишком много, и в этом случае мы используем таблицу сопоставления).   -  person Thomas    schedule 24.09.2018
comment
Спасибо Томасу за ссылку!   -  person noob13    schedule 24.09.2018


Ответы (1)


Существует метод String.replaceAll (), однако, если вы хотите сохранить достаточно точный контроль над тем, какие токены заменяются другими, вам потребуется составить точный список и закодировать все вызовы. «Для каждого токена UTF-16, который не является частью ...» - это затруднит выполнение ... (а запуск может занять очень много времени).

Универсальный метод замены строки «выполнить замену, которую я имел в виду», увы, не был подготовлен для вас.

person Erwin Smout    schedule 24.09.2018