- PR -

ファイルダウンロード時に文字化け

1
投稿者投稿内容
KOUJI
会議室デビュー日: 2006/01/11
投稿数: 3
投稿日時: 2007-03-14 13:16
ダウンロードするファイル名に
UTF-8(Unicode)からShift-JISに文字エンコードを行った際に、文字化けが発生する特殊文字(〜、−など)が含まれていた場合文字化けが発生してしまいます。

<文字エンコードを行っている処理の抜粋>
下記の処理を行った際に、文字化ける
fileName = new String(fileName.getBytes("Shift-JIS"), "ISO8859_1");


何か回避方法は、ありませんか
すみませんが、よろしくお願いします。

動作環境
DB Oracle10g (文字コードUTF-8)
JSP (文字コードUTF-8)



[ メッセージ編集済み 編集者: KOUJI 編集日時 2007-03-14 13:28 ]

[ メッセージ編集済み 編集者: KOUJI 編集日時 2007-03-14 13:29 ]
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 2007-03-14 13:47
まずjavaのバージョンを書きましょう!

Java1.3.x/1.4.0とJava1.4.1以上でUnicode文字列のマッピングが変更されています。


マッピングの違いなどは以下を参考にするのがいいと思います。
http://www.ingrid.org/java/i18n/encoding/ja-conv.html
KOUJI
会議室デビュー日: 2006/01/11
投稿数: 3
投稿日時: 2007-03-14 14:26
>フライトさん

すみません
バージョン:j2sdk1.4.2_13
です。
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 2007-03-14 15:45
リンク先を見て頂ければ分ると思いますが、Shift-JIS,Unicode間に
一部文字にマッピングの違いがあるので文字化けが発生します。

文字化けを回避したい場合は、それを修正してあげると文字化けは
発生しないと思われます。


public static String UnicodeConv(String line) {

StringBuffer sb = new StringBuffer();
char ch;
for (int i = 0; i < line.length(); i++) {
ch = line.charAt(i);
switch (ch) {
case {変換したい文字領域} :
ch = {正しいマッピング領域};
break;
}
sb.append(ch);
}
return new String(sb);
}
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2007-03-14 22:15
単に「文字化けが発生します」ではなくて、
UTF-8で(A)の文字がShift_JISで(B)にエンコードされることを期待しているのだが、
実際には(C)になってしまう。
という風に分析しないと、原因には到達できませんよ。

「Windows-31J」を指定すべき所で「Shift_JIS」を指定してるので化けているだけ、かもしれません。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2007-03-15 10:25
私が先日投稿したのとほとんど同じ表題ですね。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=36881&forum=12&start=0
ですが、ブラウザの種別によっても挙動は違います。

参考にされてはどうでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)