我有一个应用程序,我想将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);
答案 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");