簡體   English   中英

在Tomcat服務器上從jsp到jsp的POST方法使用錯誤的編碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM