java Nio (五)字符集:CharSet

5 篇文章 0 订阅

目录:

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 中的福中序列转换为字节序列。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tʀᴜsᴛ³⁴⁵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值