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

时间: 2024-10-24 13:33:19

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

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

java(IO)读写文件乱码转换UTF-8问题 读取文件 String?Content?=?"";?//?文件很长的话建议使用StringBuffer try?{ FileInputStream fs=new FileInputStream("文件录取"); InputStreamReader?isr?=?new?InputStreamReader(fis,?"UTF-8"); BufferedReader?br?=?new?BufferedRe

JAVA 中URL中文参数乱码的处理方法(汇总)

解决输入的全角汉字或者日文在URl中乱码的问题.以下我的实现 JS代码: function shiborikomuFw() {     var url = '${url08}';     var str = document.getElementsByName('fw');     //Str str = document.getElementsById('fw').Value;     for (var i = 0; i < str.length; i++) {     url = url +

java中Cookie中文字符乱码问题

如果Cookie中的Value 中有中文字符出现,在加入Cookie的时候,会出现下面的错误: java.lang.IllegalArgumentException: Control character in cookie value or attribute. 当我们设定Cookie的Value的值得时候: cookie.setValue(ret); 改为如下方式尽心编码! cookie.setValue(URLEncoder.encode(ret, "utf-8"));使用指定的编

关于Tomcat/Android/JAVA交互时中文传输乱码的解决方法

最近在做项目的时候,与服务器交互传输信息时,出现中文乱码问题.由于一开始对编码这个东西不是很了解,都是一知半解状态,平时所谓的程序中的转码也都是基于侥幸的过去了,没遇到什么问题.可这次却没这么幸运了,中文乱码....,好了,废话不多说了,直入主题. 如何才能正确解码?首先要清楚的知道源数据是以什么样的编码方式encode过来的,然后再以对应的编码方式decode才能正确解码,否则就会变成乱码! 举例说吧: 以Tomcat作服务器,默认的环境编码是ios-8859-1,客户端编码方式为UTF-8(

Java IO读写的常用方法

java的流分两大类,字节流和字符流.一般在c/c++中,一个字节是8位,java也是一样.但是,在c/c++中一个字符,即char一般也是8位(可能机器不同会有所不同),但java为了支持unicode编码,char是16位.所以,java也就有了字节流和字符流之分. 他们中的典型代表是: 1.字节流 InputStream和OutputStream 2.字符流 Reader和Writer 我想,读者要牢记这两个区别,其他的只不过是从这两大类中变化下去的.看看jdk源码,就知道一些方法怎么用了

关于JAVA写入MYSQL中文数据乱码问题的处理

1.检查JDBC中mysql的驱动是否加上了这个: jdbc:mysql://localhost:3306/db_book?useUnicode=true&characterEncoding=UTF-8 2.查看JAVA的IDE是否为UTF-8编码 3.查看数据库是否UTF-8编码 原文地址:https://www.cnblogs.com/liuyuxing1024/p/10384771.html

java io读写操作

文件的读取: public static void duqu(String path) throws IOException { File file=new File(path); FileInputStream fis=new FileInputStream(file); InputStreamReader isr=new InputStreamReader(fis,"gb2312"); BufferedReader br=new BufferedReader(isr); Strin

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

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/sys_user?useOldAliasMetadataBehavior=true&useUnicode=true&characterEncoding=UTF-8 “”&characterEncoding=UTF-8“”加上 原文地址:https://www.cnblogs.com/itzyz/p/11058914.html

关于使用java自带ZipOutputStream压缩文件名为中文的乱码问题

摘要 由于业务要求,会对文件系统中部分文件处理打包操作,开始我使用java6自带的api处理,当文件名中带有中时,打包之后的压缩文件会产生中文乱码的问题,后听说java7解决了这一问题,因行业的滞后性我没有做这样的尝试,有兴趣的读者可以自己研究一下.下面提供我的一个解决方案(apache下文件流工具). step1:引入jar包 http://central.maven.org/maven2/org/apache/ant/ant/1.7.1/ant-1.7.1.jar step2:代码样例 //