1

アラビア語で CSV ファイルの列を作成しようとしています。リソース バンドルを使用してプロパティ ファイルから値を取得していますが、アラビア語で値を取得できますが、ファイルの作成後に列名が「?????」のように表示されます。 ??????????」アラビア語の代わりに。この問題を解決するのを手伝ってください。

以下のコードを使用しています:

public static void downloadCSVForReconcilationData(String downloadStr,HttpServletResponse response,String reportName) throws IOException{

    //response.setHeader("Content-Disposition", "inline;filename=\""+"BillingTrxReport.csv"+"\"");
    response.setContentType ("application/x-csv");
    response.setHeader("Content-Disposition","attachment; filename=\""+reportName+".csv"+"\";");
    //response.setHeader("application/vnd.ms-excel;charset=Cp1256","attachment; filename=\""+reportName+".csv"+"\";");// khushwant Patidar
    response.setContentType("application/vnd.ms-excel;charset=Cp1256");// khushwant Patidar
    response.setContentLength((int) downloadStr.length());

try{
    OutputStream out = response.getOutputStream();
    PrintWriter pw = new PrintWriter(out);
    BufferedWriter bufw=new BufferedWriter(pw);
    //BufferedOutputStream outBuf = new BufferedOutputStream(out);

    bufw.write(downloadStr);
    bufw.close();
    pw.close();
    out.flush();
    out.close();

    }catch(IOException ioe){
        ioe.printStackTrace();
        throw ioe;
    }
}
4

1 に答える 1

2

content-type で CP1256 を使用する場合は、java.io.PrintStreamでファイルを作成するときに同じものを使用する必要があります。

私は提案します:

OutputStream out = response.getOutputStream();
PrintStream  ps  = new PrintStream( out, true, "CP1256" );
ps.println( downloadStr );
ps.close();

out 変数をフラッシュして閉じる必要はありません。

于 2012-11-08T08:30:47.557 に答える