0

Flash Player HttpService (Spark フォームからのデータ) によって送信され、Java サーブレットで受信されたパラメーターのデコードに問題があります。これは HttpService と Form のクライアント コードです。

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

サーブレット メソッド:

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 を表示しようとすると、中国語の記号が表示されますが、ポーランド文字のはずです。new String() で Unicode パラメータの代わりに UTF-16、UTF-16LE、UTF-16BE を使用しようとしましたが、結果は同様でした。

4

1 に答える 1

0

私が使用しているApache Tomcat 7が提供するクラスは役に立ちました。web.xml に SetCharacterEncodingFilter を追加したところ、すべてが正常に機能し、通常の方法でパラメーターを読み取ることができるようになりました (文字列名 = 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>
...
于 2013-01-28T22:48:07.340 に答える