0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Javaの文字化けに対応できず

Posted at

概要

Paas上のJBossにデプロイしたSpring Bootのアプリケーションで、あるURLのみSjisのGETリクエストが送られてくるが、日本語が文字化けする。送信されている日本語は、Shift_JISで%エンコーディングされている。Webをあさってみたところ、filterを実装して対応する例などあったがうまくいかなかった。
GETリクエストのqueryパラメタからUTF-8でリクエストを送信しなおすHTMLをブラウザに返すことで文字化けは起きない。変な処理だと思うが、記録に残す。

対応1.

サーバ側でいったんGETリクエストを受けて、queryパラメタから再度リクエストを作り直すHTML(javascript)をブラウザに返す。
onloadイベントでqueryパラメタを取り出し、ecl.jsでデコードしたのち、UTF-8でリクエストしなおす処理を実行させる。

【HTMLのJavascript部分】

<script type="text/javascript" th:src="@{/js/ecl.js}"></script>
<script type="text/javascript" th:src="@{/js/ecl_ext.js}"></script>
<script>

function convertQueryToPOSTParams(queryString) {
	  var params = {};
	  var pairs = queryString.split('&');

	  for (var i = 0; i < pairs.length; i++) {
	    var pair = pairs[i].split('=');
	    var key = decodeURIComponent(pair[0]);
	    var value = UnescapeSJIS(pair[1]);
	    params[key] = value;
        // フォームに設定
	    document.getElementById(key).value = value;
	  }

	  return params;  // console.logに表示
}

function init(){
	// 与えられたURLからクエリ文字列を取得
	var currentURL = window.location.href;
	var queryString = currentURL.split('?')[1];

	// クエリ文字列をPOSTパラメータに変換
	var postParams = convertQueryToPOSTParams(queryString);

	console.log(postParams);
	document.loginform.submit();
}

対応2

リクエストしなおすHTMLをブラウザに返すが、デコードせずにサーバに送信する。
デコードは、Apach Common Codecでサーバ側で行う。Javascriptよりなんとなく安心。

【サーバ側のデコード部分】

    	String value = request.getParameter("key");
    	String jis =null;
		try {
			jis = new URLCodec().decode(value,"Shift_JIS");
		} catch (Exception e) {
			e.printStackTrace();
		}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?