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而不是字符串文字,因为字符串容易被输入错误,而且使用标准字符集可以消除捕获异常的需要。非常感谢!这回答了我的问题。代码在应用服务器上执行。它工作得很好,但我会看看是否可以在应用服务器配置中设置默认编码,因为您发出了警告。