NIO字符集和Charset
【摘要】 目录: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)