Może istnieć wiele sposobów rozwiązania problemu Kodowanie:Jaka jest różnica między "URIEncoding" Tomcat, kodowanie Filtr i request.setCharacterEncoding
filtr Kodowanie jak Spring MVC UTF-8 Encoding
Setting URIEncoding = UTF- 8 w pliku server.xml serwera Tomcat, na przykład http://struts.apache.org/release/2.1.x/docs/how-to-support-utf-8-uriencoding-with-tomcat.html.
request.setCharacterEncoding (UTF-8)
Dzisiaj mam problem, że param ścieżka nie jest dekodowany dobrze jak
@ResponseBody
@RequestMapping(value="/context/method/{key}",method=RequestMethod.GET,produces = "application/json;charset=utf-8")
public String method(@PathVariable String key){
logger.info("key="+key+"------------");
}
widzę, że kluczem jest dekodowany złe ! Jeśli przekażę słowo "新浪"
z przedniego końca, stanie się ono "æ°æµª"
. Piszę poniższy kod w celu zbadania, czy serwer dekoduje ten z „iso-8859-1”:
public static void main(String args[]) throws UnsupportedEncodingException{
String key="新浪";
byte[] bytes=key.getBytes("UTF-8");
String decode=new String(bytes,"ISO-8859-1");
System.out.println(decode);
}
I to wychodzi z tego samego wyjścia "æ°æµª"
. tak naprawdę zmienna ścieżki jest dekodowana za pomocą ISO-8859-1.
A potem próbuję dodać filtr do mojego web.xml
, aby rozwiązać ten problem:
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Ale samo nieczytelny.
Do ustawić poniżej do mojego server.xml
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
URIEncoding="UTF-8" useBodyEncodingForURI="true" ----Here is Added
/>
I działa za to nawet ja wyjąć filtr.
Ale nadal jestem bardzo zagmatwany w kwestii kodowania. A poza tym, to jest tylko metoda GET, jeśli jest to metoda POST, domyślam się, że rozwiązanie prawdopodobnie będzie inne
Czy ktoś może wyjaśnić, jakie rozwiązanie kodowania różnic należy podjąć dla jakiego rodzaju problemu?
Dziękujemy!
1. co na temat 'request.setCharacterEncoding' 2. Czytam książkę, która w metodzie' GET', ścieżka pathvar i zapytanie (URL) są dekodowane osobno. Dlatego potrzebujemy, a URIEncoding jest dla URI (ścieżka var), a 'useBodyEncodingForURI' jest dla ciągu zapytania na adresie URL. Czy ta książka jest nieprawidłowa? – Jaskey