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());
//可以显示系统当前默认编码是什么。默认编码会作为程序中各种编码使用

Java IO读写中文各种乱码问题 【转】的更多相关文章

  1. java(IO)读写文件乱码转换UTF-8问题

    java(IO)读写文件乱码转换UTF-8问题 读取文件 String Content = ""; // 文件很长的话建议使用StringBuffer try { FileInpu ...

  2. java io读写文件

    java io读写文件相关阅读:http://www.cnblogs.com/wing011203/archive/2013/05/03/3056535.html public class DemoI ...

  3. java中Cookie中文字符乱码问题

    如果Cookie中的Value 中有中文字符出现,在加入Cookie的时候,会出现下面的错误: java.lang.IllegalArgumentException: Control characte ...

  4. Java IO读写大文件的几种方式及测试

    读取文件大小:1.45G 第一种,OldIO: public static void oldIOReadFile() throws IOException{ BufferedReader br = n ...

  5. java程序中中文没有乱码,存入数据库后中文乱码问题

    jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/sys_user?useOldAliasMetadataBe ...

  6. java中的中文参数存到数据库乱码问题

    关于java中的中文参数乱码问题,遇见过很多,若开发工具的字符集环境和数据库的字符集环境都一样,存到数据库中还是乱码的话,可以通过以下方法解决: 用数据库客户端检查每个字段的字符集和字符集校对和这个表 ...

  7. java 顺序 读写 Properties 配置文件 支持中文 不乱码

    java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的. 特从网上查资料,顺序读写的代码,如下, import j ...

  8. java读写中文文件

    在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码.原因其实很简单,就是系统的编码和程序的编码采用了不同的编码格式.通常,假如自己不修改的话,windows自身采用的编 ...

  9. java 读取文件中文乱码问题

    很少写java io的代码,今天整了一个发现 本地调试好好的,放到jmeter里就打印乱码.一番折腾,终于搞定~直接上代码: List<Order> orderList = new Arr ...

随机推荐

  1. 命名空间 - PHP手册笔记

    概述 命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念,比如在操作系统中,目录用来将相关文件分组,对于目录中的文件来说,目录就扮演了命名空间的角色.这个原理应用到程序设计领域就是命名空间 ...

  2. 类型 - PHP手册笔记

    类型简介 PHP 支持 8 种原始数据类型. 四种标量类型: boolean(布尔型,不区分大小写) integer(整型) float(浮点型,也称作double) string(字符串) 两种复合 ...

  3. {A} + {B}(unique水)

    {A} + {B} Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  4. 【测试Json的多空格问题】

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. Java缓存

    Java中要用到缓存的地方很多,首当其冲的就是持久层缓存,针对持久层谈一下: 要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定 ...

  6. linux的7种运行级别<学习笔记>

    Linux系统有7个运行级别(runlevel) 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别 ...

  7. PHP单例模式编写

    今天来点基础的设计模式: 如何利用单例模式实现一个数据库中间层 class Db{ static private $_instance; //当前数据库连接实例 static public funct ...

  8. IOS设备设计完整指南(转载)

    http://blog.sina.com.cn/s/blog_6cc9af670102vq12.html

  9. 浅析C# 中object sender与EventArgs e (转)

    一.了解C#中的预定义事件处理机制    在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理. EventArgs是包含事件数据的类的基类,用于传递事件的细节. Ev ...

  10. 每日一dp(2)——龟兔赛跑(hdu 2059)

    比較经典的动态规划的题目了 一般动态规划的想法都是先推断是否有最优子结构,无后效性.接着从状态转移入手,尽量细分状态(即给定N得到N+1),完了再递推计算 难点:转移方程,其一般也难在怎样描写叙述一个 ...