參數URIEncoding
的Tomcat中8的描述 - Apache Tomcat 8 - The HTTP Connector:
這指定的字符編碼用於在%xx解碼URL後解碼URI字節。如果未指定,則將使用UTF-8,除非org.apache.catalina.STRICT_SERVLET_COMPLIANCE系統屬性設置爲true,在這種情況下將使用ISO-8859-1。
因此,說明了從的Apache Tomcat 7的改變的org.apache.catalina.STRICT_SERVLET_COMPLIANCE
的默認值是從Apache Tomcat上假8.所以UTF-8是的URIEncoding的用於Apache Tomcat的8,這意味着現在Tomcat的默認值遵循標準(和常用)。
至於爲什麼Tomcat的使用ISO 8859-1作爲默認的URI編碼,直到Tomcat的7:
這似乎是因爲Tomcat的devevelopers認爲這是什麼Servlet規範要求(如名稱的設置STRICT_SERVLET_COMPLIANCE指示)。
事實上,Servlet規範沒有在任何版本中明確提及URI編碼。但是,它確實提到,如果Content-Type
HTTP頭沒有通過charset
(Servlet規範V2.5,「請求數據編碼」)指定編碼,則必須將POST數據解析爲ISO 8859-1。顯然這被解釋爲意味着查詢參數(以及整個URI)也應該被默認解碼爲ISO 8859-1。
根本問題可以說是Servlet規範沒有指定用於解碼URI的默認編碼,更不用說改變這種編碼的方法。這反過來可能是因爲URI規範最初不允許URI中的非ASCII字符 - 這只是通過引入IRI來標準化的,參見2005年1月的RFC 3987。因此,每個servlet容器都必須提供它們自己的默認值和配置參數,如Apache Tomcat中的URIEncoding
。
這兩個問題一直被列爲對Servlet規範的錯誤:
也許Servlet規範的能力將被修改一天...
相關問題:[如何在Tomcat中設置請求編碼?](http:// stackoverflow .com/questions/6876697/how-to-set-request-encoding-in-tomcat) – sleske