关于乱码

由于编码方式和解码方式的不同导致的内容丢失

Java会将字符串以.java文件的编码方式保存在内存中
当输出时会将字符串以.java文件的编码方式输出到输出流中

导致乱码的情况
1.程序输出时的编码方式与显示终端解码方式不同
譬如:一个以UTF8编码方式保存的.java文件输出字符串到Windows控制台(默认编码方式为GBK)就会出现乱码

Eclipse中的控制台的编码方式会随文件编码方式的而改变并保持一致,所以Eclipse中不会出现这种情况的乱码

2.在数据传输中,数据发送时的编码方式与接收时的解码方式不同

譬如:Http请求,直接以UTF-8解码网络输入流,若原网页的编码方式不是UTF-8会导致乱码
这时需要从乱码(英文字符一般不会乱码)中解析(正则或解析meta标签)出正确的编码方式
但是一般无法将乱码还原成正确的内容,因为不同字符集映射关系不同,错误的解码会导致信息的丢失,表现为“???锟斤拷”等经典乱码
这就要求在接收数据时,采用字节流的方式,先不进行解码,也就不会造成信息的丢失

另:String类的成员方法getBytes(charSet)是将此字符串按照charSet进行编码,返回得到的的byte数组
String类的构造方法new String(bytes,charSet)是将字节数组bytes按charSet进行解码

posted @ 2017-08-18 11:38  aKID  阅读(178)  评论(0编辑  收藏  举报