- PR -

特定の文字の文字化けについて

1
投稿者投稿内容
ume
ベテラン
会議室デビュー日: 2001/09/19
投稿数: 55
投稿日時: 2002-10-29 12:03
お世話になります。
Javaで日本語を扱う場合の文字コード変換についてはいろいろ話し合われていますが
特異なケースだと思いますので質問させて下さい。

あるクラスで日本語をencodeし、別クラスをよびだすURLにパラメータとして渡し、
受けたクラスでdecodeしています。
このとき、
全角カタカナの「ア」から「ミ」までの文字のみで構成される文字列の場合、文字化けし、
それ以外の文字が含まれていると正しい文字列が返されるという現象がおきています。
encodeはjava.net.URLEncoder;
decodeはgetBytes("iso-8859-1"),"JISAutoDetect"
で行っています。
「ミ」→「%A5%DF」 「ム」→「%A5%E0」に変換されています。

何かお気づきの点がありましたらご教授下さい。
よろしくお願いします。
こべっこ
常連さん
会議室デビュー日: 2002/06/22
投稿数: 20
投稿日時: 2002-10-29 12:08
引用:

umeさんの書き込み (2002-10-29 12:03) より:
「ミ」→「%A5%DF」 「ム」→「%A5%E0」に変換されています。


EUCになっていますね。
JISAutoDetectを使わずに明示的にエンコードを指定しては
どうでしょう。
ume
ベテラン
会議室デビュー日: 2001/09/19
投稿数: 55
投稿日時: 2002-10-29 19:16
こべっこ様ご回答ありがとうございました。
明示的に"EUC"を指定することで回避できました。

なぜこのような現象がおこるのでしょうか?
"JISAutoDetect"は使用しない方がよいのでしょうか
こべっこ
常連さん
会議室デビュー日: 2002/06/22
投稿数: 20
投稿日時: 2002-10-29 19:51
引用:

なぜこのような現象がおこるのでしょうか?
"JISAutoDetect"は使用しない方がよいのでしょうか


少ない文字でEUCとSJISを完全に区別するのはルール設定に無理があります。
「こっちだと化けているっぽい」という判断しかないからです。
そのため元データのエンコードが分かっているのであれば、極力明示的に
エンコード指定したほうがいいです。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-29 22:10
というよりも、JISAutoDetect は極力使用しないことです。
問題は2点あります。

- 特に短い文字列では認識違いが起こる可能性がある。
 (いわゆる半角カナのフィールドに使ったりすると死亡)
- JISAutoDetect で「シフトJIS」と判定されても、機種依存文字は?になる。
 また「〜−¢£‖」などが変になる可能性がある。

後者については VM に依存はしますが、少なくとも Sun の JDK では SJIS として扱われた記憶があります。

同様に、「機種依存文字を使わない」という明確な認識がない限り、「Shift_JIS」も使わない方が無難です(Windows-31J もしくは MS932、CP932を使う)。
JDK 1.3 までは Shift_JIS = CP932 ですが、1.4 からは Shift_JIS = SJIS、Windows-31J = CP932 になっています。
1

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