java – 将ISO8859字符串转换为UTF8? ÄÖÜ=>Ã为什么?

前端之家收集整理的这篇文章主要介绍了java – 将ISO8859字符串转换为UTF8? ÄÖÜ=>Ã为什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个代码有什么问题?我制作了一个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的构造函数.

试图“事后”解决问题

>更难做到>通常甚至不可能(因为使用错误的编码解码字节[]可能是破坏性操作).

猜你在找的Java相关文章