Java 使用Charset类解决读入字符乱码问题和控制输出字符编码

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的正确使用是非常重要的,比如当我们从互联网上下载大量网页时,需要发现网页的正确编码并在读入时利用Charset类正确将其转码,否则下载的网页就没有任何意义了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值