java中字符编码之间的转换
我无法找到如何进行下面的转换java中字符编码之间的转换,java,encoding,Java,Encoding,我无法找到如何进行下面的转换 String s = "Här har du! â\u0080\u0093 Hur väl kan du snacka?"; t = convert(s); // t should be "Här har du! â Hur väl kan du snacka?" 我找不到如何把s译成t。有人知道如何在Java中做到这一点吗?像这样试试sthg String s = "Här har du! â\u0080\u0093 Hur väl kan
String s = "Här har du! â\u0080\u0093 Hur väl kan du snacka?";
t = convert(s);
// t should be "Här har du! â Hur väl kan du snacka?"
我找不到如何把s译成t。有人知道如何在Java中做到这一点吗?像这样试试sthg
String s = "Här har du! â\u0080\u0093 Hur väl kan du snacka?";
byte[] bytes = s.getBytes("ISO-8859-1");
String str = new String(bytes, "UTF-8");
输出为
Här har du! – Hur väl kan du snacka?
对于以下代码
public static void main (String[] args) throws java.lang.Exception
{
String s = "Här har du! â\u0080\u0093 Hur väl kan du snacka?";
byte[] bytes = s.getBytes("ISO-8859-1");
String str = new String(bytes, "UTF-8");
System.out.println(str);
}
正如我在评论中提到的,您的字符串
s
似乎已经损坏。正确的解决方案是首先修复从哪里获得的s
。似乎您正在使用一些单字节编码来解释真正的“UTF-8”编码字符串(“ISO8859-1”似乎适用于您的测试字符串)
如果您尚未丢失原始字符串损坏中的数据,您可以使用以下方法修补当前字符串:
String s = "Här har du! â\u0080\u0093 Hur väl kan du snacka?";
byte[] b = s.getBytes("ISO-8859-1");
String t = new String(b, "UTF-8");
使用UTF-8。说真的,为什么现在没有人使用unicode?这是一个奇怪的问题。
字符显然是被强制转换为字符的UTF-8字节,但是是正确的,我不知道\u0080\u0093
应该是什么,因为它们不是有效的UTF-8字节序列,在windows-1252字符集中甚至没有意义。总之,这个字符串似乎不是从任何一个字符集派生出来的。你是对的,这个字符串看起来很奇怪……经过进一步的研究,它似乎是一个-,看这基本上是一个已经损坏的字符串值。在获得字符串s
之前,您的问题就出现了。如果你能在事后把事情拼凑起来,解决你的真正原因是正确的解决办法。您首先从何处获取此字符串?前两行代码使用UTF-8将字符串转换为字节,然后使用UTF-8将其转换为字符串,这意味着它们没有用处,可以删除。最后一行,newstring(latin1)
,将使用平台的默认字符集,这是一个非常糟糕的主意。它碰巧对您有用,但很难可靠。这看起来是正确的,不过最好使用StandardCharsets.ISO_8859_1和StandardCharsets.UTF_8而不是字符串文字,因为字符串容易被输入错误,而且使用标准字符集可以消除捕获异常的需要。非常感谢!这回答了我的问题。代码在应用服务器上执行。它工作得很好,但我会看看是否可以在应用服务器配置中设置默认编码,因为您发出了警告。