微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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的构造函数.

试图“事后”解决问题

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

原文地址:https://www.jb51.cc/java/128020.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐