利用JAVA IO 解决乱码的问题

   前一段时间做一个法国的项目,其中有一个数据同步的问题,客户给我们他们从自己数据库导出的xml格式的数据,我在这边写了一个定时程序,定期检测文件是否更新,并同步xml格式的数据到我们这边的数据库中。当时自己一时疏忽,利用jdom解析文件,但是后面碰到了一个问题,客户的文件过大,将近百兆,同步时会报内存溢出问题。所以采取了一个折中的办法,我把文件进行分解,以两千条数据为一个文件单位,这样问题就初步解决了。

    但是后面报出了另外一个问题,客户那面的数据中有法文字符,我分解文件的时候有些字符,如“DE CONSOLES ÉTAGÈRES”会在分解后的文件中出现乱码问题。我原来的思路是利用FileReader构件字符流,然后用BufferedReader装饰FileReader,利用BufferedReader的readline()方法逐行读取,同样的方法利用BufferedWriter,FileReader写入分割文件。

   后来我查阅了网上的资料,问题出现在编码集的问题和流与字符的纠葛。

   解决方法是利用InputStreamReader和OutputStreamWriter,并设定编码集合,如下:

   BufferedReader br = new BufferedReader(new InputStreamReader(new     FileInputStream(xmlFile), Charset.forName("utf-8")));
   BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new    FileOutputStream(xmlPath + "temp1.xml"), Charset.forName("utf-8")));

  这样问题就解决了,其实FileReader就是从InputStreamReader继承的,采用的编码格式是系统默认的。

  *************************************************************************

  •   编码方式的变迁:Ascii码(一个字节,而且高位不用,能表示128个字符)---》非Ascii码(是欧洲各国都有自己的标准,不能显示东方国家)---》UICODE(只是符号集,规定了符号的二进制代码,但是没有规定怎么存)---》UTF-8(是UICODE的实现之一,是一种变长的编码方式)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值