2017-11-01 17 views
0

私は、コンテンツを処理するために、テキストファイルをサーバーにアップロードするJavaEEアプリケーションを開発中です。 ユーザーのテキストソースは、特にそのエンコーディングによって大きく異なる場合があります。アップロードされたテキストファイルのエンコーディングが正しくありません

私はすべてをUTF-8に変換したいと思っていますが(永続化が近づいていますが)、最初に正しく読む必要があります。

私はInputStreamReaderの者のgetEncoding()メソッドを使用しています:

public void doThings(HttpServletRequest request) { 
    Part file = request.getPart("formfile"); 
    InputStreamReader isr = new InputStreamReader(file.getInputStream()); 

    // BUT THIS ALWAYS prints "UTF8" whatever the text file's encoding is : 
    System.out.println(isr.getEncoding()); 
} 

何か他のものを移動するための方法である場合、私は実際にアプリが後でデータアップをチョップするScannerクラスおよび区切り文字を使用するためのInputStreamを使用していますが、、私は...どのような方法でそれを使用すると、アプリケーションのプラットフォーム、明らかにUTF-8にnew InputStreamReader(file.getInputStream(), charsetOfFile);それ以外の場合はデフォルトを実行する必要があります任意のポインタ

答えて

2

ため

おかげでバインドされていませんよ。

エンコード/文字セットを確実に抽出する方法はありません。ヘッダーは決定的ではなく、part.getContentType()ももっと推測タイプです。おそらく、その文字セットが最初のインジケータである可能性があります。

すべてのブラウザがISO-8859-1をWindows-1252として解釈するため、charset ISO-8859-1(Latin-1)をWindows-1252(Windows Latin-1)に置き換えます。

Windows-1252も良いデフォルトです(ISO-8859-1もHTTPのデフォルトです)。

ファイルの内容がマルチバイトUTF-8形式に準拠している場合は、それを取ってください。 UTF-8検証。

Charset detectionは、いくつかのライブラリによって実装されています。 言語の検出(周波数リストによる)を使用して、不完全な私自身の検出を行いました。

文字セット検出の場合、ファイルをバイナリデータ(バイト)としてInputStreamReaderなしで読み込みます。

+0

私は、文字セットの検出が正確な科学であると思っていました...あなたの洞察に感謝します。 – Yow

関連する問題