HttpServletResponse
に追加コンテンツを追加しようとしています(を使用しています)。UTF-8エンコーディングが壊れて、JSP以外の文字が埋め込まれている
中国語や韓国語などの複数の言語をサポートするために、結果のコンテンツ(追加後)が元の文字セットとエンコードを保持するようにする必要があります。したがって、私はsuper.getContentType()
を呼び出して文字セットを取得し、それを解析して文字セットを抽出します。
たとえば、super.getContentType()
は、text/html; charset=UTF-8
を返して、UTF-8
を抽出します。
次に、PrintWriter
オブジェクト(OutputStreamWriter
をラップする)を作成している間に、その文字セットを指定します。 (注:try/catch
を明確にするために省略)
CharResponseWrapper.java:
public class CharResponseWrapper extends HttpServletResponseWrapper
{
....
@Override
public PrintWriter getWriter()
{
String charEnc = getCharsetFromContentType(getContentType());
if (charEnc != null) {
pwriter = new PrintWriter(new OutputStreamWriter(getOutputStream(), charEnc), false);
} else {
pwriter = new PrintWriter(getOutputStream());
}
}
return pwriter;
}
....
}
- は、私は韓国語のテキストとJSPを持っています。
- このJSPでは、
contentType="text/html; charset=UTF-8"
とpageEncoding="UTF-8"
が指定されています。
JSPのソース:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("한글자모/조선글");
%>
</body>
</html>
私はいくつか取得しています韓国語の文字とJSPにアクセスしようとしていますか?ブラウザの文字化け。
しかし、以下のような応答ページで文字化けしています。
한글��?모/조선글
編集済み:応答の前に空の文字列を追加して試しましたが、まだ問題に直面しています。
空白のように前にいくつかの文字を追加しても、同じ韓国語の文字は同じですか?それは固定ブロックサイズのバッファを持ち、その境界にマルチバイトシーケンスを正しく処理できないサーブレットフィルタである可能性があります。それが常に同じ文字であれば、私は理解しません。U + c790 = UTF-8 [ec 9e 90]は特別なものではありません。圧縮が有益かどうかをチェックする最初の256バイトをバッファリングする圧縮フィルタのように。 –