1

日本語のテキストを含むCSVファイルを読み込んで、このファイルからDBにデータを書き込もうとしています。CSV は、私があまり慣れていない Flex コードを介してアップロードされます。しかし、私のバックエンド側には、ファイルの内容を含む単純な byte[] があります。私は次のコードを使用しています:

//content is an array of bytes, returned by Flex side
ByteArrayInputStream in = new ByteArrayInputStream(content);
BufferedReader br = new BufferedReader(new InputStreamReader(in, Const.ENCODING_SHIFT_JIS));
String strLine;
try {
    while (true) {
    strLine = br.readLine();
    //processing CSV line by line and eventually writing data to DB
...

strLine 変数をデバッグしているときに、日本語の漢字の代わりに疑問符しか表示されません (特に、漢字の裵でテストしました)。他の日本語の文字 (たとえば、〒文字) は問題ないようです。デバッグ ウィンドウ (および後で私の DB) では、次のように表示されます。

私が同じことをしているが、コードに Const.ENCODING_SHIFT_JIS の代わりに UTF-8 と Const.UTF-8 をエンコードするファイルがある場合、すべて正常に動作します。ただし、クライアントは Shift-JIS のサポートが必要です。たぶん、誰かがこの問題を解決する方法を教えてくれるかもしれませんが、少なくともどの特定の領域 (flex、java、shift-jis エンコーディング自体...) である可能性がありますか?

4

1 に答える 1

0

いくつかの調査と試行失敗の反復の後、InputStreamReader のパラメーターとして「Shift-JIS」ではなく「JISAutoDetect」を指定すると、すべての漢字が読み取れるようになることに気付きました。

ここで見つけた説明から、JISAutoDetect は次のことを行う必要があります。それで、それはその仕事をうまくやっています。

そしてそこから、いくつかの結果を見ることができます:

1) JISAutoDetect の説明から、私が持っていたファイルエンコーディングが実際には Shift-JIS ではなかったことが理論的に可能であると推測できます。そのため、Shift-JISとしてファイルからデータを読み取った後、これらすべての文字化けが発生しました。たとえば EUC-JP だった場合、JISAutoDetect はこれを検出し、すべてを正しく変換しました。

しかし、ネイティブ エンコーディング Shift-JIS を使用する必要がある日本語版の Windows を使用しているクライアントからこのファイルを取得しました (少なくとも私のクライアントはそう主張しています)。また、UTF-8エンコーディングでファイルに保存されている同じ文字を、オンライン変換ツールを使用してShift-JISに変換しようとしました。これにより、コードを通過した後、同じ文字化けが発生しました。

2) したがって、上記のすべてが正しければ、Java での Shift-JIS ファイルの処理に何らかのバグがある可能性があります。これを信じるのは非常に難しいですが。

于 2015-07-01T21:07:31.573 に答える