博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java学习笔记】编码学习
阅读量:5107 次
发布时间:2019-06-13

本文共 2233 字,大约阅读时间需要 7 分钟。

作者:

出处:

1.ASCII码

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。
ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
2.Unicode
如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。
Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。
3.UTF-8
互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

4.应用:

Java中,如果我们用java.io.FileReader或者java.io.FileWriter来读写文件的话,我们会发现在FileReader和 FileWriter中我们只能获取编码方式,而不能设置。这样,在FileReader和FileWriter中的编码设置只能服从于一些更为底层的设置,那么在读写多种语言编码的文件时就很容易出现乱码。解决的方法是采用java.io.FileInputStream/java.io.InputStreamReader和java.io.FileOutputStream/java.io.OutputStreamWriter。在 InputStreamReader和OutputStreamWriter中,可以通过指定编码方式来完成UTF-8文件的读写。当然我们可以通过 java.io.BufferedReader和java.io.BufferedWriter来提高效率。

比如:
java.io.BufferedWriter writer = null;
java.io.FileOutputStream writerStream = new java.io.FileOutputStream(filename);   
writer = new java.io.BufferedWriter(new java.io.OutputStreamWriter(writerStream, "UTF-8")); 
// do something
// writing file
writer.close();

也可以使用下列的方法,

例如: 用 java 将文件的编码从GBK 转换成 UTF8

private static void transferFile(String srcFileName, String destFileName) throws IOException {

   String line_separator = System.getProperty("line.separator");
   FileInputStream fis = new FileInputStream(srcFileName);
   StringBuffer content = new StringBuffer();
   DataInputStream in = new DataInputStream(fis);
   BufferedReader d = new BufferedReader(new InputStreamReader(in, "GBK"));
   String line = null;
   while ((line = d.readLine()) != null)
    content.append(line + line_separator);
   d.close();
   in.close();
   fis.close();
   Writer ow = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");
   ow.write(content.toString());
   ow.close();
}

 

作者:

出处:

转载于:https://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822275.html

你可能感兴趣的文章
关于图像的处理(借鉴于精通css)
查看>>
更改gradle的java的class文件输出目录的结构
查看>>
sublime 3 安装格式化JSON插件
查看>>
[转]Visual studio 通过文件名快速定位文件
查看>>
使用XPath查询带有命名空间(有xmlns)的XML(转)
查看>>
Python 远程桌面协议RDPY简介
查看>>
Linux-USB Gadget : Part 1: 简介
查看>>
帝国cms电脑pc站url跳转到手机站url的方法
查看>>
javascript 注意事项汇总
查看>>
匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
查看>>
MYSQL初级学习笔记九:MySQL索引的使用!(视频序号:初级_51)
查看>>
Xamarin Essentials教程使用指南针Compass
查看>>
the day of python learning(文件)
查看>>
【强烈推荐】说说CSS Hack 和向后兼容
查看>>
【分享】iTOP4412开发板-Bluetooth移植文档
查看>>
关于微信支付,退款操作,原路返回
查看>>
PHP判断文件是否被引入的方法get_included_files
查看>>
Linux下安装intellij idea
查看>>
[No000006]苏格拉底与失恋者的对话
查看>>
SpringBoot中使用springfox+swagger2书写API文档
查看>>