客户需要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编辑)”功能,就会正常显示请教各位大大,有没有好的解决方法?

解决方案 »

  1.   

    这不是你程序的bug,是文件编辑器的bug。
    你可以做一个小小的测试,在一个文件中输入一个汉字“没”。然后保存。用文件编辑器打开,就会看到乱码。所有的当今流行的文件编辑器都会显示乱码。
      

  2.   

    你如果想确认文件到底有没有问题,可以考虑用PilotEdit打开,http://topic.csdn.net/u/20090818/22/df665ee5-bd6f-4c6d-84b6-9831217e4e02.html
    PilotEdit具有很强的编码识别的能力。
      

  3.   

    文件能够用ue进行正常的转换,说明文件数据应该是正常的
    用记事本打开显示乱码,觉得应该是记事本的解析出错了
    但是关键的问题在于
    如果记事本打开出错,那么客户后续的操作也会失败System.getProperty("file.encoding") = "utf-8"
    response.getCharacterEncoding() = "ISO-8859-1"
    //使用系统默认编码  结果正常  但是记事本打开显示编码为utf-8  客户处理出错
    str= new String(str.getBytes(), "8859_1")
      

  4.   

    response.setHeader("Content-type", "text/plain;charset=UTF-8");
    使用gb2312或者utf-8看看
      

  5.   

    再补充一下
    大致的错误就是:
    某些汉字会导致下载的txt文件被认为是utf-8编码的
    但实际上数据来自于getBytes("GBK")
    客户需要txt文件为GBK编码
      

  6.   

    1。下载的文件是不是GBK编码的?如果你不确定,可以发送到
    2。“下载的txt文件被认为是utf-8编码的”是被谁或什么程序认为是utf-8编码的?
      

  7.   

    PrintWriter out = response.getWriter();
    换成:
    OutputStream out = response.getOutputStream();
    试试
      

  8.   

    检查一下你用UE什么编码格式Notepad 什么格式  要一致
      

  9.   

    问题又有新的进展
    经过研究发现   我的问题跟经典的“联通干不过移动”问题一致
    即在windows环境(windows xp,不知道其他版本是否也是)下
    新建文本文档,输入“联通”,保存,再打开会发现没有了
    我遇见的是其他的中文,如“叶志山”,“袁小毛”
    都是保存后再打开会乱码
    经过google,得知是因为叶志山、袁小毛、联通等词的GBK编码
    二进制是如:  110***** 10******  110***** 10******
    会被识别为utf-8编码   于是出错哪位大大知道怎么解决?
      

  10.   

    这是记事本的bug。
    如果你用PilotEdit打开就不会有这样的问题, http://topic.csdn.net/u/20090818/22/df665ee5-bd6f-4c6d-84b6-9831217e4e02.html
      

  11.   

    数据肯定是对的  跟我用什么编辑器打开没关系
    重要的是这种txt文件  客户处理会失败
      

  12.   

    唉  直接说吧
    实际的业务情况是
    我的客户通过银行转账支付
    我的程序需要提供转账数据给银行
    使用了txt文件来作为数据载体
    大致格式如
    日期  姓名  证件号码   账号  金额
    20090827  某某某  321125197411072539  6220155813240070125  274.00
    txt文件编码为GBK
    但遇见如袁小毛、叶志山等客户
    txt转账文件用记事本打开会显示乱码,同时银行处理也会出错
    银行怎么处理的我不清楚   不过如果记事本可以正常显示  银行处理就不会有问题
      

  13.   

    使用UTF-8编码不存在显示乱码的问题  但银行无法处理
    目前我能想到的解决办法就是   跟银行协商更改转账文件的格式
    增加一个无实际意义的常量字段
    在这个字段中填充非110********  10********* 编码的汉字(如:北京)
    修改后的转账文件格式如:
    20090827  某某某  321125197411072539  6220155813240070125  274.00 北京这样可以完全解决问题  但成本太高   需要和多个银行重新协商转账文件格式
      

  14.   

    如果银行不愿意改程序,你也只能这样办了。
    三种方法都可以解决这个问题:
    1。银行改程序
    2。用UTF-8
    3。用你上面所说的方法加几个汉字。我不知道你们的文本文件中有没有注释,如果有注释的话,在注释中加几个汉字也可以。