基本的ASCII字符集,使用7位(bits)表示一个字符,共128字符 。ASCII的扩展字符集使用8位(bits) 表示一个字符,共256字符,方便支持欧洲常用字符 。
ISO-8859-1字符集:
拉丁码表,别名Latin-1,用于显示欧洲使用的语言,包括荷兰、丹麦、德语、意大利语、西班牙语等 。
ISO-5559-1使用单字节编码,兼容ASCII编码 。
GBxxx字符集:
GB就是国标的意思,是为了显示中文而设计的一套字符集 。
GB2312:简体中文码表 。一个小于127的字符的意义与原来相同 。但两个大于127的字符连在一起时,就表示一个汉字,这样大约可以组合了包含7000多个简体汉字,此外数学符号、罗马希腊的字母、日文 的假名们都编进去了,连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这 就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了 。
GBK:最常用的中文码表 。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等 。
GB18030:最新的中文码表 。收录汉字70244个,采用多字节编码,每个字可以由1个、2个或4个字节组成 。支持中国国内少数民族的文字,同时支持繁体汉字以及日韩汉字等 。
Unicode字符集 :
Unicode编码系统为表达任意语言的任意字符而设计,是业界的一种标准,也称为统一码、标准万国 码 。
它最多使用4个字节的数字来表达每个字母、符号,或者文字 。有三种编码方案,UTF-8、UTF-16和UTF- 32 。最为常用的UTF-8编码 。
UTF-8编码,可以用来表示Unicode标准中任何字符,它是电子邮件、网页及其他存储或传送文字的应用 中,优先采用的编码 。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码 。所以,我们开发Web应用,也要使用UTF-8编码 。它使用一至四个字节为每个字符编码,编码规则:
1.128个US-ASCII字符,只需一个字节编码 。
2.拉丁文等字符,需要二个字节编码 。
3.大部分常用字(含中文),使用三个字节编码 。
4.其他极少使用的Unicode辅助字符,使用四字节编码 。
2.2编码引出的问题
在IDEA中,使用 FileReader 读取项目中的文本文件 。由于IDEA的设置,都是默认的 UTF-8 编码,所以没有任何 问题 。但是,当读取windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码 。
public class ReaderDemo {public static void main(String[] args) throws IOException { FileReader fileReader = new FileReader("E:\File_GBK.txt"); int read;while ((read = fileReader.read()) != ‐1) { System.out.print((char)read);}fileReader.close();}}输出结果:???那么如何读取GBK编码的文件呢?
2.3InputStreamReader类
转换流 JAVA.io.InputStreamReader,是Reader的子类,是从字节流到字符流的桥梁 。它读取字节,并使用指定 的字符集将其解码为字符 。它的字符集可以由名称指定,也可以接受平台的默认字符集 。
构造方法
InputStreamReader(InputStream in) : 创建一个使用默认字符集的字符流 。
InputStreamReader(InputStream in, String charsetName) : 创建一个指定字符集的字符流 。
构造举例,代码如下:
InputStreamReader isr = new InputStreamReader(new FileInputStream("in.txt")); InputStreamReader isr2 = new InputStreamReader(new FileInputStream("in.txt") , "GBK");指定编码读取、、
public class ReaderDemo2 {
public static void main(String[] args) throws IOException {
// 定义文件路径,文件为gbk编码
String FileName = "E:\file_gbk.txt";
// 创建流对象,默认UTF8编码
InputStreamReader isr = new InputStreamReader(new FileInputStream(FileName));
// 创建流对象,指定GBK编码
InputStreamReader isr2 = new InputStreamReader(new FileInputStream(FileName) , "GBK");
// 定义变量,保存字符
int read;
// 使用默认编码字符流读取,乱码
while ((read = isr.read()) != ‐1) {
System.out.print((char)read); // ????
}
isr.close();
// 使用指定编码字符流读取,正常解析
while ((read = isr2.read()) != ‐1) { System.out.print((char)read);// 大家好
}
isr2.close();
}
}
2.4OutputStreamWriter类
转换流 java.io.OutputStreamWriter,是Writer的子类,是从字符流到字节流的桥梁 。使用指定的字符集将字符 编码为字节 。它的字符集可以由名称指定,也可以接受平台的默认字符集 。
推荐阅读
- 关于JavaScript及其对抓取和索引的影响
- 5大Java自动化测试框架
- redis缓存穿透,缓存击穿,缓存雪崩原因
- Redis缓存和MySQL数据一致性方案
- 全面解析Java日期时间API
- 利用nginx设置浏览器协商缓存
- 35个可以飞快提高千倍效率的Java语言代码小技巧,你值得拥有!
- 男女针灸戳身体这处缓解压力还补肾
- 经期痛不欲生?10个妙招助女人缓解痛经
- 胃病不用吃药也能治,天然"排毒王",每天吃1口,清幽门,舒缓胃不适