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