конвертировать строку UTF-8 в ISO-8859-1 Java - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть приложение, в котором я хочу преобразовать строку в кодировке utf-8 в ISO-8859-1, потому что это кодировка моего оракула DB.

В настоящее время это то, что я вставляю в мойdb:

Belgià «

Но я ожидаю этого:

België

Когда я печатаю свойСтрока в Java я получаю следующее: Belgià «

Кто-нибудь может мне помочь?

Это то, что я уже пробовал:

System.out.println(xmlString);
Charset utf8charset = Charset.forName("UTF-8");
Charset iso88591charset = Charset.forName("ISO-8859-1");
ByteBuffer inputBuffer = ByteBuffer.wrap(xmlString.getBytes(utf8charset));
// decode UTF-8
CharBuffer data = utf8charset.decode(inputBuffer);
// encode ISO-8559-1
ByteBuffer outputBuffer = iso88591charset.encode(data);
byte[] outputData = outputBuffer.array();

xmlt = new oracle.xdb.XMLType(con, new String(outputData, iso88591charset));

предложениеиз комментариев тоже не сработало:

    byte[] utf8 = xmlString.getBytes("UTF-8");
    byte[] latin = new String(utf8, "UTF-8").getBytes("ISO-8859-1");
    ByteArrayInputStream bis = new ByteArrayInputStream(latin);
    xmlt = new oracle.xdb.XMLType(con, bis);

1 Ответ

0 голосов
/ 25 сентября 2019

Обычно UTF-8 может кодировать любой код Unicode.ISO-8859-1 способен обрабатывать крошечную часть из них, и перекодировка UTF-8 в ISO-8859-1 может привести к тому, что «замещающие символы» (�) появятся в вашем тексте, когда найдены неподдерживаемые символы, а также могут быть другиепроблемы.

Транскодирование из ISO-8859-1 в UTF-8 не вызывает проблем.

Я бы предложил перекодировать текст:

byte[] latin1 = ...
byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");

или

byte[] utf8 = ...
byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1");
...