2013-01-19 31 views
0

我在Flash Player HttpService(Spark Form的數據)發送並在Java Servlet中接收到解碼參數時遇到問題。這是HttpService的和形式的客戶端代碼:從Flash Player接收到的參數的字符編碼

<mx:HTTPService id="submitForm" result="onResultSend(event)" method="POST" url="{EVMServerConnection.SERVER_ADDRESS}/UserSubmitionServlet" useProxy="false" resultFormat="text"> 
     <mx:request xmlns=""> 
      <login>{login.text}</login> 
      <password>{password.text}</password> 
      <email>{email.text}</email> 
      <userName>{userName.text}</userName> 
      <secondName>{secondName.text}</secondName> 
      <gender>{String(gender.selectedItem)}</gender> 
      <countryKey>{String(country.selectedItem)}</countryKey> 
      <city>{city.text}</city> 
      <dateOfBirth>{String(dayOfBirth.selectedItem) + String(monthOfBirth.selectedItem) + String(yearOfBirth.selectedItem)}</dateOfBirth> 
     </mx:request> 
    </mx:HTTPService> 

該servlet方法:

private void registerUser(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { 
    //request.setCharacterEncoding("UTF-16LE"); 
    System.out.println(request.getCharacterEncoding()); 
    String login = request.getParameter("login"); 
    String password = request.getParameter("password"); 
    String email = request.getParameter("email"); 
    //String userName = DataUtils.getUTF8FromUTF16String(request.getParameter("userName")); 
    //String userName = request.getParameter("userName"); 
    byte[] bytes = request.getParameter("userName").getBytes(); 
    String userName = new String(bytes , "Unicode"); 
    System.out.println("UserName: " + userName); 
    String secondName = request.getParameter("secondName"); 
    String gender = request.getParameter("gender"); 
    boolean isMale = false; 
    if (gender != null) 
     isMale = !gender.equals("1"); 
    //String countryKey = request.getParameter("countryKey"); 
    String city = request.getParameter("city"); 
    String dateOfBirth = request.getParameter("dateOfBirth"); 
    Date dateDateOfBirth = null; 

當我嘗試在控制檯上顯示,我得到中國userName的跡象,雖然它應該是波蘭的信件。我嘗試在新的String()中使用UTF-16,UTF-16LE,UTF-16BE而不是Unicode參數,但結果類似。

回答

0

有用的是由我正在使用的Apache Tomcat 7提供的類。我在我的web.xml中添加了SetCharacterEncodingFilter,現在一切正常,我可以以普通方式讀取參數(通過String name = request.getParameter(「name」))

... 
<filter> 
    <filter-name>SetCharacterEncoding</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> 
</filter> 
<filter-mapping> 
    <filter-name>SetCharacterEncoding</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
...