在java中所有信息都是以Unicode进行编码的,而计算机中有很多编码,如果处理不当则会产生乱码,在java nio包中提供了 Charset 类负责处理编码问题,创建编码器CharsetEncoder和创建解码器CharsetDecoder。
如: Charset类的全部编码 import java.nio.charset.Charset ; import java.util.SortedMap ; import java.util.Iterator ; import java.util.Map ; public class GetAllCharsetDemo{ public staticvoid main(String args[]){ SortedMap<String,Charset>all = null ; // 得到全部可用的字符集 all =Charset.availableCharsets() ; //迭代输出 Iterator<Map.Entry<String,Charset>>iter = null ; iter =all.entrySet().iterator() ; while(iter.hasNext()){ Map.Entry<String,Charset>me = iter.next() ; System.out.println(me.getKey()+ " --> " + me.getValue()) ; } } }
编码解码操作:
import java.nio.charset.Charset ; import java.nio.charset.CharsetEncoder ; import java.nio.charset.CharsetDecoder ; import java.nio.CharBuffer ; import java.nio.ByteBuffer ; public class CharsetEnDeDemo{ public staticvoid main(String args[]) throws Exception { // 只能表示的英文字符 Charsetlatin1 = Charset.forName("ISO-8859-1") ; //Charsetlatin1 = Charset.forName("GBK") ; // 得到编码器 CharsetEncoderencoder = latin1.newEncoder() ; // 得到解码器 CharsetDecoderdecoder = latin1.newDecoder() ; // 通过CharBuffer类中的 CharBuffercb = CharBuffer.wrap("2013年五一上映钢铁侠三") ; // 进行编码操作 ByteBuffer buf = encoder.encode(cb) ; // 进行解码操作 System.out.println(decoder.decode(buf)); /** *由于ISO-8859-1编码只能显示英文,故中文是没法显示的,程序会报错 */ } }
|