【问题标题】:convert UTF-8 String to ISO-8859-1 java将 UTF-8 字符串转换为 ISO-8859-1 java
【发布时间】:2020-01-25 18:20:53
【问题描述】:

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

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

比利时«

但我希望这样:

比利时

当我在 java 中打印我的字符串时,我得到以下信息: 比利时«

谁能帮帮我?

这是我已经尝试过的:

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));

来自 cmets 的建议也无效:

    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);

【问题讨论】:

  • 通常需要数据库驱动来处理字符编码。您尝试过简单的xmlt = new oracle.xdb.XMLType(xmlString) 吗?
  • 请解释一下“UTF-8 编码字符串”是什么意思。你的意思是你有 UTF-8 字节,使用 UTF-8 以外的字符编码将它们解码为String

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


【解决方案1】:

通常 UTF-8 可以对任何 Unicode 代码进行编码。 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");

【讨论】:

  • 我试过了,并用我使用的代码编辑了我的问题。我是不是做错了什么?
  • 通常正如我所说,将 UTF-8 字符串转换为 ISO-8859-1 并不是一个好主意,因为它会产生很多问题,并且还会在字符处理方面引发错误......UTF-8 本身可以对任何 Unicode 代码进行编码
猜你喜欢
  • 1970-01-01
  • 2014-07-04
  • 2014-08-29
  • 2012-10-08
  • 2016-07-29
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
相关资源
最近更新 更多