zoukankan      html  css  js  c++  java
  • Java IO读写中文各种乱码问题 【转】

    Java IO读写中文各种乱码问题

    转自:http://blog.sina.com.cn/s/blog_484ab56f0101muzh.html

    java.io.*读写中文各种乱码,很费劲。不完全解决方法如下:

    对于Reader,直接使用Reader系列读取中文会乱码,需要先生成InputStream,再通过InputStreamReader转换为Reader,同时设定编码,才能避免乱码。如
       FileInputStream fis = new FileInputStream("D:/a.txt");
       BufferedReader br = new BufferedReader(new InputStreamReader(fis,"gb2312"));
     
    对于RandomAccessFile,直接用RandomAccessFile去写中文的时候会有乱码,要这样使用写才没有乱码。
    RandomAccessFile raf = new RandomAccessFile("D:/c.txt","rw");
    raf.seek(raf.length());//从文件尾部写
    raf.write("我勒个去".getBytes("UTF-8"));//UTF-8或者gbk以打开的文件的实际编码为准。这个是文本文件是UTF-8编码时
    raf.write("我勒个去".getBytes("gbk"));//这个是文本文件是gbk编码时
     
    而RandomAccessFile的readLine方法读的时候,居然又变成了用8859_1编码读……不可思议啊。使用String的getByte和构造方法转换。
       RandomAccessFile raf = new RandomAccessFile("D:/cc.txt","rw"); //源文件是Gbk编码
       String l = raf.readLine(); //这会按照8859_1读   
       l = new String(l.getBytes("8859_1"),"gbk"); //将8859_1转成Gbk。如果源文件是utf-8,这儿就改成utf-8
     
    另外发现几个类有转码的功能
    PrintWriter(String filename, String csn);//PrintWriter的构造函数可以选择编码(Csn:charset name),csn可以是"UTF-8"或者"gbk"
    "字符串".getBytes("UTF-8"); //String字符串在转为Byte[]时可以按指定编码转
    new String(byte[] b, String csn); //这个可以将byte[]编码转换
     
    System.out.print(Charset.defaultCharset()); //可以显示系统当前默认编码是什么。默认编码会作为程序中各种编码使用
  • 相关阅读:
    Delphi ini文件结构简介
    Delphi 格式化函数 Format函数
    Delphi 获取系统的语言环境参数GetSystemDefaultLangID、VerLanguageName、GetLocaleInfo
    Delphi DBGrid 实现复选框
    SQL 循环语句几种写法
    Delphi 左键代替右键
    CSV (逗号分隔值文件格式)
    中国人工智能AI框架自主研发
    电动汽车:不是如果,而是什么时候和多快
    KITTI数据集上MaskRCNN检测效果示例
  • 原文地址:https://www.cnblogs.com/cheneasternsun/p/5048810.html
Copyright © 2011-2022 走看看