首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

再谈java乱码GBK和UTF-8互转尾部乱码问题分析

解码为一个unicode字符串 String str2=new String(byteArray1,"ISO-8859-1"); System.out.println("转成ISO-8859-1会乱码...String(byteArray2,"UTF-8"); System.out.println("数据没有丢失:"+str3); } 输出: unicode字符串:用户 6 转成ISO-8859-1会乱码...; System.out.println("转成GBK乱码:"+str2); //将GBK编码的unicode字符串转回为byte[] byte[] byteArray2=str2.getBytes...运行结果: unicode字符串:用户 6 转成GBK乱码:鐢ㄦ埛 数据没有丢失:用户 好像没有问题,这就是一个误区。...ISO-8859-1测试结果: unicode字符串:用户名 9 转成GBK乱码:用户名 数据没有丢失:用户名 GBK 测试结果: unicode字符串:用户名 9 转成GBK乱码:鐢ㄦ

3.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

再再谈java乱码GBK和UTF-8互转尾部乱码问题分析(续)

在《再谈java乱码GBK和UTF-8互转尾部乱码问题分析》我们分析了,如果从一个UTF-8 的字节序列,经过 new String(b,"GBK") 的操作,"可能"(与总字节数有关)会破坏数据。...同时,可参考:一段java代码带你认识锟斤拷 GBK字节码用UTF-8解码 来看一段代码: public static void main(String[] args) throws IOException..., ParseException { String str="中国人"; System.out.println(str); byte[] b=str.getBytes("GBK");...小结 先回顾一下前文的结论: 对于任意字节流,使用ISO-8859-1 转为字符串再转回来,是安全的;使用GBK和UTF-8可能会破坏数据。...现在扩展一下,使用GBK可能会破坏数据,损失最后一个字;如果使用UTF-8 可能损失大部分的字。 但这绝不是说UTF-8 是不好的,而是在这个乱码问题出现的时候,UTF-8是最惨烈的。

2.1K30

UNICODE,GBK,UTF-8

UNICODE,GBK,UTF-8 UNICODE,GBK,UTF-8     简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的...按照程序员的称呼,GB2312、GBK都属于双字节字符集 (DBCS)。 2000年的GB18030是取代GBK1.0的正式国家标准。...所谓“错误”是指与文本作者的本意不符,这时就产生了乱码。 答案是Windows按照当前的缺省代码页去解释文本文件里的字节流。缺省代码页可以通过控制面板的区域选项设置。...如果他使用了0x80-0xff之间的字符,中文Windows又按照缺省的GBK去解释,就会出现乱码。...meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> 如果原作者使用的代码页和ISO8859-1兼容,就不会出现乱码

2.6K20

Unicode,GBK和UTF-8

因此,我们可以看到,如果不按照约定的规则来解码,就很有可能无法还原出原来的数据,也就是我们经常遇到的"乱码”....('utf8').decode('gbk') 浣犲ソ 如上面的代码所示, “你好"两个汉字字符的unicode分别为4f60和597d, utf-8编码后占6个字节, 而gbk编码后占4个字节....如果用utf8编码后错误地用gbk来解码, 就会得到3个unicode码点,分别表示字符浣,犲和ソ;而如果用gbk编码后 错误地用utf8来解码, 则在解码第二个字符时无法凑够3个字节, 因此会得到未知的结果...注: 本文的python代码示例是在Linux Terminal下运行的, 因此默认为utf-8编码, 如果你是在Windows cmd里运行, 则通常默认GBK编码, 因此乱码会在不同地方出现:)...知道字符编解码的用法之后,我们就可以解释一下常见的一些乱码由来了, 比如在Windows下,未初始化的栈会初始化为0xcc, 未初始化的堆内存会初始化为0xcd, 可以看到前者为’烫’的gbk编码,而后者正好为

1.5K20
领券