Java中用UTF-16编码字符(见博文Java 正确遍历字符串),Charset类建立了UTF-16编码的字节序列和其它字符编码方式的字节序列之间的映射。当从外面读入表示字符的字节流时,我们可以通过Charset类指定原来字符的编码方式,好让程序可以正确的把字符原来的字节编码转化为Java自己的字节编码;同样,当把字符写出时,我们可以通过Charset指定字符的编码方式。下面举两个简单的例子来说明Charset的使用。
public void test1() { Charset charset = Charset.forName("UTF-8"); try { InputStream inputStream = new FileInputStream("test1.txt"); int num = inputStream.available(); System.out.println("available bytes number is : " + num); byte[] bytes1 = null; if (num > 0) { bytes1 = new byte[num]; System.out.println("bytes1 length is : " + bytes1.length); inputStream.read(bytes1); // charset指定的是字节数组原来的字符编码集 System.out.println(new String(bytes1, charset)); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public void test2() { Charset charset = Charset.forName("UTF-8"); try { OutputStream outputStream = new FileOutputStream("test1.txt"); String compareString = "liyuncong wangfang 李"; // charset指定对字符串中字符编码的字符编码集 byte[] bytes2 = compareString.getBytes(charset); outputStream.write(bytes2); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Java 使用Charset类解决读入字符乱码问题和控制输出字符编码
原文地址:http://blog.csdn.net/l294265421/article/details/47381167