将UTF-8字符串转换为ISO-8859-1 java

时间:2019-09-25 14:10:51

标签: java utf-8 character-encoding iso-8859-1

我有一个应用程序,我想将utf-8编码的字符串转换为ISO-8859-1,因为这是我的oracle DB的编码。

当前这是我要在数据库中插入的内容:

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 :(得分:0)

通常,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");