一 前言
Java NIO提供了字符集,实现对文件编码,解码的更好支持,用字符集可以获取系统支持的编码格式,在获取文件时,可以指定解码格式,然后进行输出时,指定编码的格式,避免获取和输出的文件时乱码。
二 字符集
availableCharsets():获取系统可支持的编码格式
canEncode() :通知此 charset 是否支持编码
newDecoder()
:为此 charset 构造新的解码器。
newEncoder()
:为此 charset 构造新的编码器。
decode(ByteBuffer bb)
:将此 charset 中的字节解码成 Unicode 字符
三 应用
1.获取系统支持编码字符集
package com.myd.cn.Nio;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
/**
* 获取系统支持的编码格式
* @author MAYADONG
*
*/
public class GetAllCharset01 {
public static void main(String[] args) {
//声明编码格式存放变量
SortedMap<String, Charset> all = null;
//进行赋值
all = Charset.availableCharsets();
//声明迭代器进行迭代输出
Iterator<Map.Entry<String,Charset>> it = null;
//进行迭代有序输出
it = all.entrySet().iterator();
while (it.hasNext()){
Map.Entry<String, Charset> me = it.next();
System.out.println("key: "+me.getKey()+",value: "+me.getValue());
}
}
}
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
/**
* 获取系统支持的编码格式
* @author MAYADONG
*
*/
public class GetAllCharset01 {
public static void main(String[] args) {
//声明编码格式存放变量
SortedMap<String, Charset> all = null;
//进行赋值
all = Charset.availableCharsets();
//声明迭代器进行迭代输出
Iterator<Map.Entry<String,Charset>> it = null;
//进行迭代有序输出
it = all.entrySet().iterator();
while (it.hasNext()){
Map.Entry<String, Charset> me = it.next();
System.out.println("key: "+me.getKey()+",value: "+me.getValue());
}
}
}
2.对输出内容进行编码,解码输出
package com.myd.cn.Nio;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class CharsetEncodeDemo {
public static void main(String[] args) throws CharacterCodingException {
//指定编码格式的字符集
Charset iso = Charset.forName("GBK");
//获取该编码格式的编码器
CharsetEncoder en = iso.newEncoder();
//获取该编码格式的解码器
CharsetDecoder de = iso.newDecoder();
CharBuffer cb = CharBuffer.wrap("MODL急啊存放");
//进行编码获取
ByteBuffer buf = en.encode(cb);
//进行解码输出
System.out.println(de.decode(buf));
}
}
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class CharsetEncodeDemo {
public static void main(String[] args) throws CharacterCodingException {
//指定编码格式的字符集
Charset iso = Charset.forName("GBK");
//获取该编码格式的编码器
CharsetEncoder en = iso.newEncoder();
//获取该编码格式的解码器
CharsetDecoder de = iso.newDecoder();
CharBuffer cb = CharBuffer.wrap("MODL急啊存放");
//进行编码获取
ByteBuffer buf = en.encode(cb);
//进行解码输出
System.out.println(de.decode(buf));
}
}
四 总结
编码发现如果编码的格式不能支持相应的文字,会出现 java.nio.charset.UnmappableCharacterException: Input length = 1的异常,需要指定正确的编码格式。