2012-04-20 8 views
9

私はローカルでもjbossサーバーでもdb内にあるように、すべての項目が発音区別記号付きで正しく表示されるリストグリッドを持っています。CSVエンコーディングの問題へのエクスポート

しかし、jbossサーバーでは、csvとしてエクスポートしようとするとすべての発音区別文字が置き換えられますので、発音記号はリストグリッドに正しく表示されますが、Şcoalaの代わりにì~coalaのようなものがあります。

ローカルでは、リストグリッドに表示され、エクスポートされています。ここで

は、輸出のために私のコードです:

また
private void Export() { 
    String exportAs = (String) m_ExportForm.getField("exportType").getValue(); 
    FormItem item = m_ExportForm.getField("showInWindow"); 
    boolean showInWindow = item.getValue() == null ? false : (Boolean) item.getValue(); 

    // exportAs is either XML or CSV, which we can do with requestProperties 
    Map<String,String> params= new java.util.HashMap<String, String>(); 
    params.put("Accept-Charset","utf-8"); 

    DSRequest dsRequestProperties = new DSRequest(); 
    dsRequestProperties.setHttpHeaders(params); 
    dsRequestProperties.setExportValueFields(true); 
    dsRequestProperties.setExportAs((ExportFormat)EnumUtil.getEnum(ExportFormat.values(), exportAs)); 
    dsRequestProperties.setExportDisplay(showInWindow ? ExportDisplay.WINDOW : ExportDisplay.DOWNLOAD); 

    // TODO: move in user-config 
    dsRequestProperties.setExportTitleSeparatorChar("_"); 
    dsRequestProperties.setExportDelimiter(";"); 

    dsRequestProperties.setExportFilename("export." + extensionsValueMap.get(exportAs)); 
    dsRequestProperties.setContentType("text/csv; charset=UTF-8"); 
    m_Target.Export(dsRequestProperties); 

    Close(); 
} 

、私はこれを持って私のJBoss 7プロパティファイルに:

<system-properties> 
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/> 
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/> 
</system-properties> 

listgridsが適切に特殊記号を表示して動作します。

また、私のweb.xmlに私が

<init-param> 
    <param-name>encoding</param-name> 
    <param-value>UTF-8</param-value> 
</init-param> 

は、たぶん私は間違ってトラックによ私のサーブレットのために持っていると、これは何か他のものによって引き起こされます。

ローカルにエクスポートされたファイルとjbossサーバからエクスポートされたファイルの両方が、正確なファイルサイズを持っています。

また、私のJBoss JVMの私はJAVA_OPTS

-Dfile.encoding=UTF-8 

EDITのプロパティを設定します。が原因提案へのparamsマップを追加しました。まだ何も。

+0

これはある程度の洞察を与えるかもしれませんか? https://community.jboss.org/message/646601 – Phani

+0

HTTPリクエストとレスポンスヘッダーをキャプチャして投稿します。また、ダウンロードしたCSVのファイルサイズと、「??」があるファイルサイズをバイトで記入してください。 –

答えて

2

文字のエンコード/デコードの問題のようです。

あなたのコードは、UTF-8エンコーディングでCSVファイルを生成しました。しかし、どのプログラムを使用して CSVを読む? Windowsのメモ帳?それがWindowsアプリケーションの場合、テキストファイルがISO-8859-1エンコーディングであると仮定している可能性があります。

オプション1:

メモ帳またはWindowsアプリケーションにエンコードを通知します。メモ帳では、File/Openダイアログにエンコードドロップダウンがあります。これをUTF-8に切り替えます。

オプション2:

変更Windowsのデフォルトのエンコーディングに一致するISO-8859-1からUTF-8からソースコード、エンコーディングで。ライン変更:

​​

dsRequestProperties.setContentType("application/csv; charset=UTF-8"); 

はうまくいけば、トリックを行います。 org.apache.catalina.connector.URI_ENCODINGの設定はファイルのエンコーディングには影響しません。そのままにしておく必要があります。

+0

ファイルをダウンロードするとutf-8へのjvmエンコードがローカルで発生する問題があります。問題のある発音を含むファイルを取得できます。私のjbossサーバーで同じことをすると、ファイルは分音記号なしで保存されます。これはファイルを読むことの問題ではありません。 – Fofole

+0

@Fofole、ダウンロードしたファイルに対してJBossサーバーがどの文字セットを宣言していますか? 'Content-type:text/plain; charset = UTF-8'?ローカルのdevマシンとJBossサーバーで同じですか? fiddler/netmonやWireSharkは何を表示しますか? – Ben

1

この星座では、私はcharset=...を見たことがありません。 しかし、文字セットは、テキストのために、より理にかなっているので、最初に試してみてください。うまく文字セットのバイトエンコーディングが危険になるだろう、バイナリデータを示している可能性があり

dsRequestProperties.setContentType("text/csv; charset=UTF-8"); 

理由、applicationを。


を追加しました:エラーのために私の説明

はたぶん文字列asExportはUTF-8を得たが、代わりにマルチバイト文字用の2つの文字を提供します。これらも非ASCII範囲にあり、あなたの応答は何とかISO-8859-1(デフォルトのlatin-1)を提供したいと考えており、??と書いています。 これは2つのエラーです。

asExportを調べることができます。 UTF-8で文字を書くのがなぜ成功しないのですか?

+0

変更しても結果は同じです:( – Fofole

+0

グローバル設定を行いましたが、サーブレットにはエンコーディング用のinit-paramもあります; http://www.smartclient.com/smartgwtee/server/javadoc/index.html?com /isomorphic/servlet/IDACall.html。あなたはそれが見えないとは想像できません。おそらく 'exportAs'はすでに間違っています;私の答えに加えられました –

1

あなたのJBoss設定には、エンコーディングを妨害しているFilterServletがあると思います。認証または圧縮に関連している可能性があります。

関連する問題