javaでの文字化け(WAVE DASH問題)の解決方法


String moji = "ABCあいうえおABC~~めほー-ABC";
byte[] jis = moji.getBytes("ISO2022JP");
System.out.println(new String(jis, "ISO2022JP"));

実行結果
ABCあいうえおABC??めほー?ABC

となりますが、?じゃなくてちゃんと~や-にするには、
どうすれば、よいのでしょうか?!

回答の条件
  • 1人2回まで
  • 登録:2007/12/28 15:07:21
  • 終了:2008/01/04 15:10:02

回答(3件)

id:tanashi No.1

tanashi回答回数9ベストアンサー獲得回数02007/12/28 16:19:07

ポイント60pt

エンコードをMS932にしてはどうでしょうか?

String moji = "ABCあいうえおABC~~めほー-ABC";

byte[] jis = moji.getBytes("MS932");

System.out.println(new String(jis, "MS932"));

id:daigakuinsei

すいません。

言葉足りてませんでした。

ISO2022JPで、とある処理をしたくて、

しかも処理が終わった後に、元のエンコーディングに

戻したいのです・・・

2007/12/29 01:08:06
id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402007/12/29 15:12:45

ポイント10pt

WAVE DASH を FULLWIDTH TILDE に置換してから処理しては?

質問内容だと、

>String moji = "ABCあいうえおABC~~めほー-ABC";

UNICODE

>byte[] jis = moji.getBytes("ISO2022JP");

UNICODE -> ISO2022JP に変換(文字化け)

だと思うので・・・。

--------

http://www.atmarkit.co.jp/fjava/rensai3/mojibake03/mojibake03.ht...

> 3つ目は、のUnicodeコードポイントを強制変換するコードを自作する方法だ。

>例えば、Windows-31Jベースのテキスト・ファイルから読み込んだコンテンツを1文字ずつ

>チェックし、U+FF5Eの「~」を見つけたらU+301Cに置き換える、といった具合である。

>コーディングの手間は掛かるが、柔軟性は高いといえるだろう。

最悪は、こういう感じのロジックをいれるしかないかと思います。

id:afternoontea No.3

afternoontea回答回数9ベストアンサー獲得回数02007/12/30 02:36:33

ポイント10pt

MS932文字列 -> ISO2022JPバイト配列 -> MS932文字列

ということでしょうか?


以下の2つの方法を使えばできると思います。

(1)CharsetEncoderを使って文字列をバイト配列に変換する

(2)CharsetDecoderを使ってバイト配列を文字列に変換する


Unicodeへのマッピングが異なる文字「~」については個別に置換する必要があります。

//(Windows-31J -> Unicode) -> (ISO-2022-JP -> Unicode)

unicode = unicode.replaceAll("\uff5e", "\u301c"); //~

unicode = unicode.replaceAll("\uff0d", "\u2212"); //-


MS932のファイルを読み込んでISO-2022-JPのバイト配列に変換して

もう一度MS932のファイルに書き出すサンプルを作ってみました。

http://d.hatena.ne.jp/afternoontea/20071229

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません