FC2ブログ
一陣の神風が舞う
東北弁炸裂するショボプログラマの日々(´・ω・`)
09 | 2019/10 | 11
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

Javaでマルチバイトの文字列をHttpリクエストから取得すると文字化けする原因

文字化けの背景

フォームで入力された値がサーバに送信される時 URLエンコードが行われバイト列としてサーバに送信されます。
サーブレット側では送られてきたバイト列を元の文字列に戻すが、 ここでデータの文字コードを「ISO-8859-1(Latin1)」だと判断して戻してしまう為、 文字化けが発生します。

対策

Latin1でString型にされてしまっているので、 一度byte配列に戻して、改めて正しい文字コードでString型を生成すればいい。

// この時点ではまだ化けている
String bake = request.getParameter("data");

// "ISO_8859_1"で文字列をバイト配列に戻す
byte[] data = bake.getBytes("ISO_8859_1");

// 正しい文字コードで文字列を生成する
String answer = new String(data, "UTF-8");


String formData = new String(request.getParameter("form_data").getBytes("ISO_8859_1"), "Windows-31J");
結局のところ、文字化けだーって上記のようなパラメータを取るサンプルがあるけど、 それをまとめて書いてるでスた。(・x・;)

でも、これってHTMLに"form_data"パラメータなかったら速攻でぬるぽだねえ。
いっそユーティリティ化して、自分用のgetParameter()を実装したほうが末永く愛用できそうだね。


参考:JavaDrive「サーブレット入門:リクエスト情報の取得(HttpServletRequedt):日本語パラメータの対応(getBytes)」
http://www.javadrive.jp/servlet/request/index3.html


テーマ:プログラミング - ジャンル:コンピュータ

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://ciablo.blog70.fc2.com/tb.php/88-314f886c
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Mahny

Author:Mahny
趣味PG派生の職業PG(+SE?)。頭のデキはきっと残念ω

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

ペット