[英]Wrong encoding using POST method from jsp to jsp on a Tomcat server
我目前正在學習JEE,在一個練習中,我只需要使用帶有POST方法的基本格式將文本數據從.jsp文件發送到另一個文件。 通過這種形式,我希望能夠使用帶重音符號的字符,因此在我的jsp文件頂部使用<%@page pageEncoding="UTF-8" %>
,它們同時具有<meta charset="utf-8">
標記,然后將我的IDE(Eclipse)配置為以UTF-8編碼所有內容。
問題是,在該行的結尾,當我嘗試使用EL顯示我的字符時,帶重音的字符(以及我猜想的其他字符)都以ISO-8859-1編碼。
這里真正的特殊之處在於,當使用GET方法發送數據時,我一點都沒有問題。 當我通過Servlet中設置的屬性在請求中傳遞String時,結果相同。
實際上,我已經通過將請求發送到servlet並在doPost方法中調用request.setCharacterEncoding("utf-8")
來解決了這個問題(確切地說,在此之前調用request.getCharacterEncoding()
給我null
),但是我d想了解這里到底發生了什么。 我猜它來自服務器配置錯誤,但是當我檢查服務器配置的web.xml文件時,這些行如下:
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
我感到困惑的是,沒有人告訴過我使用request.setCharacterEncoding("utf-8")
,而且我認為這樣做不正常,所以我想問題是:我絕對必須使用它嗎? 為什么呢 編碼不應該通過服務器的配置來處理嗎?
我正在服務器上使用Tomcat 9,而我在Ubuntu下(不知道是否有幫助)。
答案在這里(感謝Selaron): http ://balusc.omnifaces.org/2009/05/unicode-how-to-get-characters-right.html
URL解碼POST請求參數是一個故事。 即,Web瀏覽器應該發送Content-Type請求標頭中使用的字符集。 但是,大多數網絡瀏覽器都不這樣做。 這些Web瀏覽器將只使用與提供表單時所用頁面相同的字符編碼,即,它與HTTP響應或標簽的Content-Type標頭中指定的字符集相同。
基本上,問題來自導航器,該導航器應傳遞在標頭請求中使用的編碼字符集,但不這樣做。 由於沒有給Tomcat任何字符集來解碼請求,因此默認情況下,它自行決定執行ISO-8859-1樣式。 顯然,您無法進行配置! 因此,您只需通過指示編碼字符集為UTF-8來強制使用它即可。
我猜寫我正在關注的講座的那個人有一個更好的導航器,因為他從未提到過這個問題。 無論如何,現在我感覺好多了! 非常感謝 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.