1、

计算机中文件、数据底层都是基于二进制的。

计算机底层并没有文本文件、图片文件之分,它只是记录着每个文件的二进制序列。

字符集:包含着字符和二进制序列之间的对应关系,一个字符对应一个二进制序列。

编码(Encode):把人能看懂的明文转换为计算机能理解二进制序列。

解码(Decode):把计算机中的二进制序列转换为人能看懂的明文。

乱码:解码方式与编码方式不同,即编码、解码使用的字符集不一致。

Windows中文本文件的默认字符集是GBK。

2、

字节的文件输出流可以指定写入模式:

FileOutputStream fos=new FileOutputStream(String/File file);
FileOutputStream fos=new FileOutputStream(String/File file,boolean b);     //第二个参数指定是否是追加模式,true——追加,false——覆盖。

字符的文件流可以指定字符集:

FileWriter fw=new FileWriter(String/File file);
FileReader fr=new FileReader(String/File file);
 //指定字符集
FileWriter fw=new FileWriter(String/File file, String/Charset charset);
FileReader fr=new FileReader(String/File file, String/Charset charset);
//字符的文件输出流还可以指定写入模式
FileWriter fw=new FileWriter(String/File file, boolean b ); //是否是追加模式
FileWriter fw=new FileWriter(String/File file, String/Charset charset, boolean b);

2个转换流可以指定编码/解码的字符集:

InputStreamReader isr=new InputStreamReader(InputStream is, String/Charset  charset);   //指定解码字符集
OutputStreamWriter osr=new OutputStreamWriter(OutputStream os, String/Charset charset); //指定编码字符集

3、NIO中的Charset类

   //创建Charset对象,指定编码/解码用的字符集
Charset charset=Charset.forName("GBK"); //创建编码器
CharsetEncoder encoder=charset.newEncoder();
//使用编码器进行编码。编码是把字符序列转换为字节序列,参数只能是CharBuffer类型,返回值是ByteBuffer类型
ByteBuffer byteBuffer=encoder.encode(CharBuffer charBuffer); //创建解码器
CharsetDecoder decoder=charset.newDecoder();
//使用解码器进行解码。解码是把字节序列转换为字符序列,参数为ByteBuffer类型,返回值是CharBuffer类型
CharBuffer charBuffer=decoder.decode(ByteBuffer byteBuffer);

也可以不创建编码器、解码器:

    //创建Charset对象,指定编码/解码用的字符集
Charset charset=Charset.forName("GBK"); //编码
ByteBuffer byteBuffer=charset.encode(String str); //此处可使用String做参数
ByteBuffer byteBuffer=charset.encode(CharBuffer charBuffer); //解码
CharBuffer charBuffer=charset.decode(ByteBuffer byteBuffer);

更加简单。

String类的对象还可以使用以下方法将String(字符序列)编码为byte[](字节序列):

  • byte[]  getBytes()     //使用平台默认的字符集
  • byte[]  getBytes(String/Charset  charset)     //使用指定的字符集

返回编码好的字节序列。

Java 字符集,编码、解码的更多相关文章

  1. 有关Java字符集编码的问题

    在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的? A.每个中文字符占用2个字节,每个英文字符占用1个字节 B.假设数据库中 ...

  2. Java Base64编码解码实现

    我尝试过两种方式:java自带的sun.misc的工具类,还有commons-codec.jar 1.sun.misc的工具类 String encoderStr = null; BASE64Enco ...

  3. Java Base64 编码解码方案总结

    Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应用上,Base64除了能将Binary资料可视化之外 ...

  4. java base64编码解码

    第一种.DatatypeConverter 使用JDK自带DatatypeConverter.java类实现,JDK版本必须>=1.6 /** * @Description base64编码 * ...

  5. java字符集编码乱码问题

    博客分类: web javajspservlet  最近做网页这块时碰到了正文字符乱码问题.别看这小小的一个问题,对我来说却花费了好长一段时间.现在让我慢慢分析它吧(说实话.这些有部分是从网上找的,但 ...

  6. JAVA基础---编码解码

    所谓编码 即char->byte 所谓解码 即byte->char ISO-8859-1 中文字符会被黑洞吸收 全部变为"?" GB2312 汉字可以被编码为双字节 但 ...

  7. java URI 编码解码

    import java.io.UnsupportedEncodingException; /** * url转码.解码 */ public class UrlUtil { private final ...

  8. Java 字符集编码

    一.字符编码实例1.NioTest13_In.txt文件内容拷贝到NioTest13_Out.txt文件中 public class NioTest13 { public static void ma ...

  9. 常用的js、java编码解码方法

    前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...

随机推荐

  1. 3 View - Request对象

    1.HttpReqeust对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象 视图函数的第一个参数是HttpRequest对象 在django.http模块中定义了Htt ...

  2. Python协程详解(一)

    yield有两个意思,一个是生产,一个是退让,对于Python生成器的yield来说,这两个含义都成立.yield这个关键字,既可以在生成器中产生一个值,传输给调用方,同时也可以从调用方那获取一个值, ...

  3. 6、CSS基础 part-4

    1.CSS 定位属性 CSS 定位属性允许你对元素进行定位. 属性 描述 position 把元素放置到一个静态的.相对的.绝对的.或固定的位置中. top 定义了一个定位元素的上外边距边界与其包含块 ...

  4. Python+Selenium基础篇之4-XPath的使用

    开始写自动化脚本之前,我们先学习几个概念,在完全掌握了这几个概念之后,有助于我们快速上手,如何去编写自动化测试脚本. 元素,在这个教程系列,我们说的元素之网页元素(web element).在网页上面 ...

  5. git+jenkins持续集成二-jenkins定时构建语法:定时构建语法

    构建位置:选择或创建工程_设置_构建触发器 1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月 ...

  6. jsonp的原理及应用

    https://blog.csdn.net/u011897301/article/details/52679486

  7. bzoj3105【CQOI2013】新nim游戏

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 sol  :要想必胜则拿完后异或空间不能包含0,即给对手留下一组线性基 为保证拿走的最小 ...

  8. bzoj4455【ZJOI2016】小星星

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4455 给一张图和该图的一棵生成树,求可能的编号方案数 sol  :dalao教导我们,看到计数 ...

  9. Codeforces Round #330 (Div. 2) B 容斥原理

    B. Pasha and Phone time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  10. String 类详解

    StringBuilder与StringBuffer的功能基本相同,不同之处在于StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此效率上StringBuilder类 ...