这个代码有什么问题?我制作了一个ISO8859字符串.因此,大多数ÄÖÜ都是一些krypooutput.没关系.但是如何将它们转换回普通字符(UTF8或其他东西)?
String s = new String("Üü?öäABC".getBytes(),"ISO-8859-15"); System.out.println(s); //ÃÃŒ?öÀABC => ok(?) System.out.println(new String(s.getBytes(),"ISO-8859-15")); //ÃÂÃÅ?öÃâ¬ABC => ok(?) System.out.println(new String(s.getBytes(),"UTF-8")); //ÃÃŒ?öÀABC => huh?
解决方法
一个构造,如new String(“Üü?öäABC”.getBytes(),“ISO-8859-15”);几乎总是一个错误.
你在这里做的是获取一个String对象,在平台默认编码中获取相应的byte []并将其重新解释为ISO-8859-15以将其转换回String.
如果平台默认编码碰巧是ISO-8859-15(或者足够接近这个特定字符串没有区别,例如ISO-8859-1),那么它是一个无操作(即它没有实际效果) .
在所有其他情况下,它很可能会破坏String.
如果你试图“修复”一个字符串,那么你可能为时已晚:如果你必须使用特定的编码来读取数据,那么你应该在二进制数据转换为字符串数据的地方使用它.例如,如果从InputStream读取,则需要将正确的编码传递给InputStreamReader的构造函数.
试图“事后”解决问题
>更难做到>通常甚至不可能(因为使用错误的编码解码字节[]可能是破坏性操作).