2011-10-18 8 views
0

のJava、サーブレットは、MySQL、Tomcatと速度を使用して、次のステップが取られた:VelocityでUTF-8を設定するには?

  • velocity.properties:
    • input.encoding = UTF-8
    • output.encoding = UTF-8を
  • のserver.xml
    • はURIEncoding = UTF-8
  • <html><head>文字セット
    • メタHTTP-当量= "Content-Typeの" コンテンツ= "text/htmlの; CHARSET = UTF-8"
  • 日食のプロパティ、プロジェクトのプロパティ、&エディタのエンコードファイル
    • セットUTF-8
  • JDBC接続に該当するものすべてに:
    • db.url = JDBCます。mysql://:?/ useEncoding =真& characterEncoding = UTF-8
  • のjava /サーブレットコード:
    • request.setCharacterEncoding(UTF-8)

上記のすべてが機能しませんでした。 (UTF-8を返しgetCharacterEncoding()はない)

private String getParameter(String key) { 
    String param = request.getParameter(key); 
     if (Util.isNotEmpty(param)) { 
      try { 
       return new String(param.getBytes("8859_1"), "utf-8"); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
      return param; 
     } 
    return null; 
} 

を上記request.setCharacterEncodingが効果を持っていなかったことを意味し、次のコードが実行されるまで要求ラッパーがThreadLocalオブジェクトにラップされていることを認識します。

これはどのように発生し、どのように解決できますか?

+0

この現象は、あなた(またはVelocity)がHTTP応答の 'Content-Type'ヘッダーに' charset'属性を設定しなかったことを示します。ページがHTTP経由で提供されている場合、「」タグは**無視されます**。代わりに、HTTP応答Content-Typeヘッダーのcharset属性が使用されます(存在する場合)。 ''タグは、ユーザがウェブページをローカルディスクに保存した後、後で 'file:/// 'によってディスクから見るときにのみ使用されます。あなたの問題はVelocity側で解決される可能性があります。 – BalusC

+0

OK、私はVelocityLayoutServletを拡張してレスポンス文字エンコーディングを設定し、ヘッダーを "Content-Type:text/html; charset = UTF-8"にするように出力しました。 元の投稿(管理者の編集前)で述べたように、この問題はクライアントからサーバーへと起こります。つまり、フォームデータを保存するとき、つまり上記の関数の肯定的な効果です。 ありがとう –

答えて

0

パラメータを正しく解釈するには、URLをtomcatでUTF-8として解析する必要があります。これをserver.xmlコネクタのプロパティに設定します。次のものを使用してください:

<Connector port="8080" 
       maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
       enableLookups="false" redirectPort="8443" acceptCount="100" 
       debug="0" connectionTimeout="20000" 
       disableUploadTimeout="true" 
       URIEncoding="UTF-8"/> 
+0

私はすでに元の投稿を参照してくださいでした。ありがとう。 –

0

ブラウザでOKと認識されたエンコードでパラメータがエンコードされます。しかし、これは一度isoエンコーディングを使ったXHTMLだった場合には、奇妙なブラウザ設定やxmlヘッダー<?xml version = "1.0" encoding = "iso8895_1"?>に基づいている可能性があります。

関連する問題