2012-12-11 65 views
0

我試圖從請求標題獲取文件名,儘管我已經定義了字符編碼問題我的web.xml中的Spring編碼篩選器Spring MVC 3.1 - 請求標題字符編碼問題[UTF-8]

String fileName = request.getHeader("X-File-Name"); // wrong encoding 

的web.xml

 <filter-name>CharacterEncodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

而且我已經添加URIEncoding="UTF-8"配置到Tomcat server.xml文件。 並添加了相同的配置JAVA_OPTS。

-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8 

回答

2

那麼如果標題總是UTF-8(或ASCII其他),你可以這樣做:

public static String reEncode(String input) { 
    Charset w1252 = Charset.forName("Windows-1252"); //Superset of ISO-8859-1 
    Charset utf8 = Charset.forName("UTF-8"); 
    return new String(input.getBytes(w1252), utf8); 
} 

... 

String fileName = reEncode("Mekanizması.pdf"); //request.getHeader("X-File-Name") 
System.out.println(fileName); //Mekanizması.pdf 
+0

非常感謝Esailija的幫助,現在我能夠獲得正確的價值。 – talha06

+0

非常脆弱,因爲有HTTP標頭的字符編碼保證。 –

+0

@ Michael-O是的,這就是爲什麼它表示UTF-8或ASCII。如果是在其他隨機編碼中,他會看到mojibake。我會推薦一個正常的查詢參數,fwiw。 – Esailija

0

沒有爲HTTP標頭定義的編碼。預計他們最多支持ISO-8859-1。更好地依靠US-ASCII。顧名思義,參數就是URI和它們的參數。沒有其他的。

+0

我看,讓我怎麼能得到的文件從HTTP報頭中的權值? – talha06

+0

@ talha06你現在得到的價值是多少? – Esailija

+0

例如,我得到「OnayMekanizması.pdf」而不是「OnayMekanizması.pdf」,這是正確的文件名。 – talha06