加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将ISO8859字符串转换为UTF8? =为什么?

发布时间:2020-05-29 00:55:23 所属栏目:Java 来源:互联网
导读:这个代码有什么问题?我制作了一个ISO8859字符串.因此,大多数都是一些krypooutput.没关系.但是如何将它们转换回普通字符(UTF8或其他东西)? String s = new String(ü?ABC.getBytes(), ISO-8859-15); System.out.println(s); //?ABC = ok(?)

这个代码有什么问题?我制作了一个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的构造函数.

试图“事后”解决问题

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

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读