• Java 字符集,编码、解码


    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类

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

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

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

    更加简单。

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

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

    返回编码好的字节序列。

  • 相关阅读:
    架构设计之NodeJS操作消息队列RabbitMQ
    如何搭建一个功能复杂的前端配置化框架(一)
    Web as a App(Web既APP)的概念可以提出吗?
    Bottle源码阅读笔记(二):路由
    Bottle源码阅读笔记(一):WSGI
    Python__slots__详解
    [译]如何在Web开发中使用Python
    C#中Internal关键字的总结
    [DataContract]引用
    分享一个与ABP配套使用的代码生成器源码
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/10936786.html
Copyright © 2020-2023  润新知