javaio流⽂字乱码_Java之IO流读写乱码问题(字符编码)为什么IO流读写中可能会出现乱码问题??
①编码和解码规则不⼀致
②这个字符编码不⽀持某种语⾔(ex:中⽂)
那我们应该怎么去尽可能的避免出现乱码的情况呢??
1.编码  : String  --->  byte[]
String中有对应的⽅法:
①:byte[] getBytes() : 使⽤平台的默认字符集将此 String 编码为 byte 序列
②:byte[] getBytes(Charset charset) : 使⽤指定的字符编码来编码字符串
③:byte[] getBytes(String charsetName) : 使⽤指定的字符编码来编码字符串
2.解码  : byte[]  --->  String
String中有对应的构造⽅法:
ascii文字是啥
①:String(byte[] bytes) : 通过使⽤平台的默认字符集解码指定的 byte 数组
②:String(byte[] bytes, Charset charset): 使⽤指定的字符集来解码指定的byte数组
③:String(byte[] bytes, String charsetName) : 使⽤指定的字符集来解码指定的byte数组
字符编码:ex:有⼀个字  ==》需要  存储到磁盘  如何进⾏存储??
常见字符编码:
ASCII编码:⽤来表⽰英⽂,它使⽤1个字节表⽰,其中第⼀位规定为0,其他7位存储数据,⼀共可以表⽰128个字符。
0-7数据  : 英⽂的编码
GBK  ==》 ASCII                ex: 65 ==》A      97 ==》a
拓展ASCII编码:⽤于表⽰更多的欧洲⽂字,⽤8个位存储数据,⼀共可以表⽰256个字符
GBK/GB2312/GB18030:简称国标,表⽰汉字。GB2312表⽰简体中⽂,GBK/GB18030表⽰繁体中⽂,其实就是⼏个不同的版本⽽已。
Unicode编码:包含世界上所有的字符,是⼀个字符集。
UTF-8:是Unicode字符的实现⽅式之⼀,它使⽤1-4个字符表⽰⼀个符号,根据不同的符号⽽变化字节长度
ISO8859-1:是单字节编码,向下兼容ASCII,不⽀持中⽂!
注意:实际web开发  前台⽹页  后台Java程序  数据库  多个地⽅都会涉及到字符编码  ==》 因此⼀定要保持⼀致
ex:
/**
* Java之IO流读写乱码问题(字符编码)
* 1.编码 : String ---> byte[]
* String中有对应的⽅法:
* ①:byte[] getBytes() : 使⽤平台的默认字符集将此 String 编码为 byte 序列
* ②:byte[] getBytes(Charset charset) : 使⽤指定的字符编码来编码字符串
* ③:byte[] getBytes(String charsetName) : 使⽤指定的字符编码来编码字符串
* 2.解码 : byte[] ---> String
* String中有对应的构造⽅法:
* ①:String(byte[] bytes) : 通过使⽤平台的默认字符集解码指定的 byte 数组
* ②:String(byte[] bytes, Charset charset) : 使⽤指定的字符集来解码指定的byte数组
* ③:String(byte[] bytes, String charsetName) : 使⽤指定的字符集来解码指定的byte数组* @author 郑清
*/
public class Demo {
public static void main(String[] args) throws UnsupportedEncodingException {
//eclipse在以GBK语⾔的情况下测试
//编码:
byte[] b = "这个数据是中⽂!可能会出现乱码".getBytes();
System.out.String(b));
byte[] b2 = "这个数据是中⽂!可能会出现乱码".getBytes("UTF-8");
System.out.String(b2));
//解码:
System.out.println(new String(b));
System.out.println(new String(b, "utf-8"));//编码和解码规则不⼀致 ==》出现乱码问题System.out.println(new String(b2,"GBK"));//编码和解码规则不⼀致 ==》出现乱码问题System.out.println(new String(b2,"utf-8"));//编码和解码规则⼀致 ==》不会出现乱码问题}
}
运⾏结果图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。