2013-08-13 1 views
4

У меня есть вариант использования, когда я отправляю параметры контроллеру весны через запрос по почте. В контроллере я читаю параметры и выполняю некоторые действия. После этого я отправляю эти параметры как часть параметров запроса на другой URL.Китайский кодировка символов?

Здесь я не могу иметь дело с китайскими персонажами. Он становится искаженным.

Действия, которые я делаю сейчас: 1) Я перехожу под китайский текст как параметр с темой названия с HTML-страницы (это не JSP). 以下 便是 有关 此 问题 的 所有 信息

2) Когда я прочитал это значение из запроса в контроллере, он приходит как: ä »¥ ä¸ä¾¿æ¯æå³æ¤é®é ¢ çææä¿¡ æ

3) Я не могу получить точное значение, которое отправляется со страницы.

Похоже, он уже закодирован, когда я проверить закодированный текст на уровне ниже URL: http://coderstoolbox.net/string/#!encoding=none&action=encode&charset=utf_8 http://www.cafewebmaster.com/online_tools/utf_decode

4) Теперь я хочу передать фактический пользователь, направивший строку в другой URL, как response.sendRedirect. Я попробовал расшифровать URL-адрес, чтобы увидеть, могу ли я получить фактическую строку, но не успел.

Я использую сервер tomcat. Я определил кодировку UTF-8 в server.xml и добавил URLEncodingFilter в web.xml в качестве первого фильтра. Этот фильтр выполняет request.setEncoding для UTF-8.

Все еще я не могу отслеживать, где все происходит неправильно. Может ли кто-нибудь предложить мне, как вернуть фактическую строку в контроллер?

также ниже фильтра в моей web.xml

<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> 

Позвольте мне знать, если вам нужна информация, чтобы получить больше контекста.

+1

Philipp Сандера и добавление URIEncoding = "UTF-8" в service.xml разъем должен быть все, что нужно. – hajime

+1

@ CMR: OP ясно упоминает, что это относится к запросу POST. Таким образом, 'URIEncoding' не имеет никакого эффекта. – BalusC

ответ

2

Если вы используете, пожалуйста, измените разъем в файле server.xml, как показано ниже

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" 
    redirectPort="8443" useBodyEncodingForURI="true"> 
</Connector> 

Надеется, что это решит вашу проблему.

С уважением, Ответ Кишора

0

попытаться добавить этот фильтр к вашему web.xml:

<filter> 
    <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> 

я была аналогичная проблема, и это решил.

+0

У меня этот фильтр в моем web.xml, но до сих пор не используется – Rajeev

+0

Я добавил отображение, если вы его забыли –

+0

У меня есть отображение ниже. Я чувствую, что это тоже нормально. <фильтр-отображение> EncodingFilter <фильтр имя-/> <имя-сервлет> SpringMVCServlet ЗАПРОС FORWARD Rajeev

0

После выполнения декодирования ниже я могу получить фактическую строку. Я все еще расследую, почему мне нужно делать латинское декодирование. Я буду обновлять, как только я получу полное понимание проблемы. Если кто-то из вас знает причину латинского кодирования, пожалуйста, дайте мне знать.

public String getncodedSubject(String text) { 
     if (text == null || text.isEmpty()) { 
       return ""; 
     } 
     try { 
      byte[] encoding1 = subject.getBytes("UTF-8"); 
      String string1 = new String(encoding1, 0, encoding1.length); // Default encoding of my platform is UTF-8 
      byte[] encoding2 = string1.getBytes("ISO8859-1");//ISO-8859-1 (ISO Latin 1) Character Encoding 
      char[] hexaChars = Hex.encodeHex(encoding2); 
      StringBuilder str = new StringBuilder(); 
      for(int i=0;i<hexaChars.length;i = i+2){ 
       str.append("%"); 
       str.append(hexaChars[i]); 
       str.append(hexaChars[i+1]); 
      }    
      return str.toString(); 
     } catch (UnsupportedEncodingException e) { 
      System.out.println(e); 
     } 
     return ""; 
    } 

После рытья больше, это кажется, что это становится латинской закодированной строка:

import java.nio.charset.CharsetDecoder; 
import java.nio.charset.Charset; 
import java.util.Arrays; 

public class Main { 
    public static void main(String[] args) throws Exception { 
     byte[] encoding1 = "以ä¸ä¾¿æ¯æå³æ­¤é®é¢çææä¿¡æ¯".getBytes("ISO8859-1"); 

     for (byte b : encoding1) { 
      System.out.printf("%x ",b); 
     } 
    } 
} 

Тем не менее я не уверен, как это становится латинской закодированной строка ... какие-нибудь предложения? Я проверил на своем сервере.xml также

-1

Спасибо каждому за ваши ответы. После дальнейших исследований ниже приведены мои наблюдения.

Я обрабатываю свою страницу с помощью Mason (Perl + HTML), не использую JSP. Поэтому мне не удалось указать тип кодировки на странице, чтобы заставить браузер отправлять кодированную строку UTF-8.

Теперь я программно декодируюсь с помощью «ISO8859-1» (латинский) и кодируя UTF-8, чтобы получить фактическую строку для потребления.

Пожалуйста, дайте мне знать о том, как указать тип кодировки в Mason (Perl + HTML), чтобы он передавал параметры с кодировкой UTF-8 вместо того, чтобы принимать кодировку по умолчанию.

import java.nio.charset.CharsetDecoder; 
import java.nio.charset.Charset; 
import java.util.Arrays; 

public class Main { 
    public static void main(String[] args) throws Exception { 
     byte[] encoding1 = "ä»¥ä¸‹ä¾¿æ˜¯æœ‰å…³æ­¤é—®é¢˜çš„æ‰€æœ‰ä¿¡æ ¯".getBytes("ISO8859-1");     
     String s = new String(encoding1, "UTF-8"); 
     System.out.println(s); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^