烦人的Java中文乱码问题

    实习中处理上传网页的东西。无奈网页的编码文件有UTF-8 和 GBK两种格式,如果不转码中文一定会乱。折腾了很久得到一点心得记录一下:

1.String类型其实无所谓编码格式,只有byte[]是有编码格式的。String 中只有全世界通用的Unicode而String str = new String(str.getBytes("..."),"...")是将str中的内容解析成相应的byte[]再将 byte按字符规则转成新的unicode存入str。

2.如果源文件是GBK的,就用GBK来读去,如果是UTF-8就要按UTF-8来读取。写入的时候只与文档打开的方式有关,写成UTF-8就要用UTF-8来打开(读取)。

比如如果是GBK的文件想写成UTF-8:

String wholeString;
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f),"GBK"));
while((strGBK = br.readLine())!=null){  
          String strGBK = new String(strGBK.getbytes("GBK"),"UTF-8");
     wholeString += strGBK

}

OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File("/home/xiaoyao/workFile/checkCode.txt")),"UTF-8");

或者可以写入之前做wholeString = new String(wholeString.getBytes("UTF-8"),"UTF-8");然后直接写入字符串。将字符中正确的unicode转成UTF-8的byte再写入unicode,其实我觉得很多余,但不知为什么这样做又是有效的,劝大家还是乖乖用byte数组写入。

os.write(str.getByte("UTF-8"));这样的API更放心一点
3.如果想读入字符串但怕转码过程破坏unicode,可以先用unicode读入,写之前在从unicode转成目标字符集。

String content = new String(bytes,"ISO-8859-1");
content = new String(content.getBytes("ISO-8859-1"),"UTF-8")
这样就不会有问题了。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值