public byte[] getBytes(String charsetName) 使用指定的字符集将此String编码为byte序列,结果存在一个byte数组中 public String(byte[] bytes, String charsetName) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。 在网络传输中,信息都是以字节序列的方式传输的。所以,发送方的String要按照某种编码方式(如UTF-8,GBK)编码为字节序列,在网络中传输后,接收方取得这个字节序列,按照相同的编码方式将字节序列解码为String。 请看下面的代码片段: String name = "张三"; byte[] b1 = name.getBytes("UTF-8"); String name1 = new String(b1, "UTF-8"); //编码解码相同,正常显示 System.out.println(name1); String name2 = new String(b1, "GBK"); //编码解码不同,乱码 System.out.println(name2); byte[] b2 = name.getBytes("GBK"); String name3 = new String(b2, "GBK"); //编码解码相同,正常显示 System.out.println(name3); String name4 = new String(b2, "UTF-8"); //编码解码不同,乱码 System.out.println(name4); 至于你的那个情况,要先用gbk编码,然后再用utf-8解码才能获得正常的字符串,我估计是因为 1.传输过来的字节码是用utf-8编码的,假设字节码为b。 2.你获得的那个字符串,假设为s,是用gbk对b进行解码获得的字符串,所以是乱码。 3.你使用gbk对s进行编码,用gbk解码之后再编码,于是获得了原来的b。 4.你使用utf-8解码,所以获得了正常的字符串。 简单的说: b -> (gbk解码) -> 乱码 -> [此处开始是你做的](gbk编码) -> b -> (utf-8解码) -> 正常字符串 研究完编码收获会不小的,对以后理解Java的输入输出(尤其是网络通信和文件读写)都很有帮助。
字符串编码
最新推荐文章于 2023-06-27 19:58:58 发布