NIO字符集和Charset

举报
xcc-2022 发表于 2022/07/21 22:19:11 2022/07/21
【摘要】 目录:java Nio(一) : Nio 和Io 的区别java Nio(二): Buffer(缓冲区)的数据存取java Nio(三):直接缓冲区 和 非直接缓冲区java Nio(四) :通道(Channel)java Nio(五) : 字符集:CharSet字符集:java默认使用 Unicode 字符集,但是很多操作系统并不会使用 Unicode 字符集,那么当从系统中读取数据到ja...

目录:

java Nio(一) : Nio 和Io 的区别
java Nio(二): Buffer(缓冲区)的数据存取
java Nio(三):直接缓冲区 和 非直接缓冲区
java Nio(四) :通道(Channel)
java Nio(五) : 字符集:CharSet

字符集:java默认使用 Unicode 字符集,但是很多操作系统并不会使用 Unicode 字符集,那么当从系统中读取数据到java程序时,就会出现乱码等问题。

JDK 1.4 提供了CharSet 来处理字节序列和字符序列之间的转换关系,该类包含了用于创建解码器 和 编码器 的方法,还提供了获取 CharSet 所支持的字符集的方法,CharSet 是不可变的。

/**
 * 字符集:Charset
 *       编码(Encode) : 字符串 -> 字节数组
 *       解码(Decode) : 字节数组 -> 字符串
 *
 *  当要保存文本文件时,程序必须把文件中的每个字符翻译成二进制文件。
 *  当需要读取文件时程序必须把二进制序列转换为一个个的字符。
 */

1·,获取java中所支持的字符集:

//获取java所支持的字符集。
private static void test1(){
    Map<String, Charset> map = Charset.availableCharsets();
    for(Map.Entry<String,Charset> m : map.entrySet()){
        System.out.println(m.getKey()+" = "+m.getValue());
    }
}

2,字符 和 字节 按指定的字符集转换

//字符 和 字节 按指定的字符集转换
private static void test2(){
    Charset gbk = Charset.forName("GBK");

    //获取编码器
    CharsetEncoder ce = gbk.newEncoder();
    //获取解码器
    CharsetDecoder cd = gbk.newDecoder();

    //创建缓冲区
    CharBuffer cBuffer = CharBuffer.allocate(1024);
    cBuffer.put("我们好像在哪见过!");
    cBuffer.flip();//切换为可读
    try {
        //对字符串进行编码
        ByteBuffer encode = ce.encode(cBuffer);
        System.out.println("编码");
        for (int i = 0; i < encode.limit(); i++) {
            System.out.print(encode.get()+"  ");
        }


        //将字节解码为字符串
        encode.flip();
        CharBuffer decode = cd.decode(encode);
        System.out.println("\n解码后:"+decode.toString());
    } catch (CharacterCodingException e) {
        e.printStackTrace();
    }
}

decode(ByteBuffer bb) : 将字节序列转换 为 字符序列。
encode(CharBuffer cb) : 将字符序列转换 为 字节序列。
encode(String str) : 将String 中的福中序列转换为字节序列。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。