客户需要txt文件的下载
使用了如下代码(片段)//从数据库获取数据 oracle 10g
String str = new String( (Tools.readClob("*********"));
str = new String(str.getBytes("GBK"), "8859_1");//输出到页面
PrintWriter out = response.getWriter();
response.setHeader("Content-type", "text/plain");
response.setHeader("Content-Disposition", "attachment;filename=\"" + ".txt" + "\"");
out.print(str);
一般情况下都是正常的 但是偶尔会遇见个别汉字,如“袁”
用记事本打开,就会显示乱码
但如果用ue打开,使用转换“unicode/ASCII/UTF-8 到 UTF-8(ASCII编辑)”功能,就会正常显示请教各位大大,有没有好的解决方法?
使用了如下代码(片段)//从数据库获取数据 oracle 10g
String str = new String( (Tools.readClob("*********"));
str = new String(str.getBytes("GBK"), "8859_1");//输出到页面
PrintWriter out = response.getWriter();
response.setHeader("Content-type", "text/plain");
response.setHeader("Content-Disposition", "attachment;filename=\"" + ".txt" + "\"");
out.print(str);
一般情况下都是正常的 但是偶尔会遇见个别汉字,如“袁”
用记事本打开,就会显示乱码
但如果用ue打开,使用转换“unicode/ASCII/UTF-8 到 UTF-8(ASCII编辑)”功能,就会正常显示请教各位大大,有没有好的解决方法?
你可以做一个小小的测试,在一个文件中输入一个汉字“没”。然后保存。用文件编辑器打开,就会看到乱码。所有的当今流行的文件编辑器都会显示乱码。
PilotEdit具有很强的编码识别的能力。
用记事本打开显示乱码,觉得应该是记事本的解析出错了
但是关键的问题在于
如果记事本打开出错,那么客户后续的操作也会失败System.getProperty("file.encoding") = "utf-8"
response.getCharacterEncoding() = "ISO-8859-1"
//使用系统默认编码 结果正常 但是记事本打开显示编码为utf-8 客户处理出错
str= new String(str.getBytes(), "8859_1")
使用gb2312或者utf-8看看
大致的错误就是:
某些汉字会导致下载的txt文件被认为是utf-8编码的
但实际上数据来自于getBytes("GBK")
客户需要txt文件为GBK编码
2。“下载的txt文件被认为是utf-8编码的”是被谁或什么程序认为是utf-8编码的?
换成:
OutputStream out = response.getOutputStream();
试试
经过研究发现 我的问题跟经典的“联通干不过移动”问题一致
即在windows环境(windows xp,不知道其他版本是否也是)下
新建文本文档,输入“联通”,保存,再打开会发现没有了
我遇见的是其他的中文,如“叶志山”,“袁小毛”
都是保存后再打开会乱码
经过google,得知是因为叶志山、袁小毛、联通等词的GBK编码
二进制是如: 110***** 10****** 110***** 10******
会被识别为utf-8编码 于是出错哪位大大知道怎么解决?
如果你用PilotEdit打开就不会有这样的问题, http://topic.csdn.net/u/20090818/22/df665ee5-bd6f-4c6d-84b6-9831217e4e02.html
重要的是这种txt文件 客户处理会失败
实际的业务情况是
我的客户通过银行转账支付
我的程序需要提供转账数据给银行
使用了txt文件来作为数据载体
大致格式如
日期 姓名 证件号码 账号 金额
20090827 某某某 321125197411072539 6220155813240070125 274.00
txt文件编码为GBK
但遇见如袁小毛、叶志山等客户
txt转账文件用记事本打开会显示乱码,同时银行处理也会出错
银行怎么处理的我不清楚 不过如果记事本可以正常显示 银行处理就不会有问题
目前我能想到的解决办法就是 跟银行协商更改转账文件的格式
增加一个无实际意义的常量字段
在这个字段中填充非110******** 10********* 编码的汉字(如:北京)
修改后的转账文件格式如:
20090827 某某某 321125197411072539 6220155813240070125 274.00 北京这样可以完全解决问题 但成本太高 需要和多个银行重新协商转账文件格式
三种方法都可以解决这个问题:
1。银行改程序
2。用UTF-8
3。用你上面所说的方法加几个汉字。我不知道你们的文本文件中有没有注释,如果有注释的话,在注释中加几个汉字也可以。