2016-06-17 8 views
0

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にアクセスしようとしていますか?ブラウザの文字化け。

しかし、以下のような応答ページで文字化けしています。

한글��?모/조선글 

編集済み:応答の前に空の文字列を追加して試しましたが、まだ問題に直面しています。

+0

空白のように前にいくつかの文字を追加しても、同じ韓国語の文字は同じですか?それは固定ブロックサイズのバッファを持ち、その境界にマルチバイトシーケンスを正しく処理できないサーブレットフィルタである可能性があります。それが常に同じ文字であれば、私は理解しません。U + c790 = UTF-8 [ec 9e 90]は特別なものではありません。圧縮が有益かどうかをチェックする最初の256バイトをバッファリングする圧縮フィルタのように。 –

答えて

0

コンテンツがエンコードされていないようですが、エンコードタイプUTF8でjspを事前にコンパイルしてjspの代わりにアプリケーションクラスフォルダに配置することをテスト目的で試すことができます。

+0

コンパイルされたjspのバージョンであるTomcatワークフォルダ内のjavaファイルをチェックしました。 JavaファイルはUTF-8でエンコードされ、韓国語の文字は正しくエンコードされます。 – thamsrang

+0

基本的には、jspページからリクエスト、レスポンス・オブジェクトまで、すべてのレイヤーで同じエンコーディングを使用する必要があります。eclipseを使用してファイルを保存し、チェック・ボックスを左クリックしてプロパティ - >チェックアウト - テキストファイルのエンコーディング。それが解決しない場合、 –

+0

のようなすべてのリクエストをエンコードするフィルタを持つことができます。 ServletExceptionをスローする { request.setCharacterEncoding( "UTF-8"); chain.doFilter(request、response); } –

関連する問題