-2

我想在 JAVA 中对这个字符串“Dürrnerstrasse 1 Postfach 1463,D-8800 Ansbach”进行 utf-8 编码以避免特殊字符。

有人可以在这里分享代码吗?

String s = rs.getString("address");
byte [] b = s.getBytes("UTF-8");
String newString = new String(b,"UTF-8");

转换后还是一样

4

1 回答 1

2

您的字符串已经是 UTF-8,但以 ISO-8859-1 编码:

                // D      ü      r    r    n    e    r    s    t    r    a   s    s    e
byte[] rawdata = {68, -61, -68, 114, 114, 110, 101, 114, 115, 116, 114, 97, 115, 115, 101};
                  // 0xC3, 0xBC = "ü" in UTF-8
String s = new String(rawdata, "ISO-8859-1");   // this is what your rs.getString() returns
System.out.println(s);

结果是

Dürrnerstrasse

如果要将字符串重新解释/重新编码s为 UTF-8,则需要使用正确的源编码检索字节数组,然后使用 UTF-8 目标编码重新创建字符串:

byte[] stream = s.getBytes("ISO-8859-1");
String s2 = new String(stream, "UTF-8");
System.out.println(s2);

结果是

Dürrnerstrasse

附带说明一下,假设它rs是 JDBC ResultSet,您还应该考虑正确配置数据库客户端/驱动程序 - 如果您的数据库已经使用 UTF-8,驱动程序应该能够返回正确编码的字符串,这样您就不需要在您的应用程序中重新编码它们。

于 2013-03-22T08:15:06.047 回答