1

UTF-8 文字を SagePay に投稿するのに苦労しています。データベースは、データベース文字セットが utf8 で、データベース照合順序が utf8_general_ci の MySQL です。データベース接続文字列は useUnicode=true&characterEncoding=UTF-8 を使用し、jsp ページは <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> として正しくエンコードされます

データベースに投稿されたすべてのデータは UTF-8 として保存され、クエリされたすべてのデータは UTF-8 として表示されますが、文字列が次のようにエンコードされている場合:

crypt = Base64Coder.encodeString(encXor(strPost));

そして SagePay に投稿すると、国際文字が見つかった場所から文字化けした文字列を受け取ります。文字列内に国際文字が含まれていない場合、SapePay への投稿は成功しています。

私の質問は、照会されたデータが UTF-8 である場合、投稿前の暗号化またはエンコーディングが UTF-8 ではないのはなぜですか。また、UTF-8 エンコーディングを強制したり、ISO-8859-1 を強制的に SagePay に投稿させたりするにはどうすればよいでしょうか。 UTF-8 を維持することを好みますが、解決策を見つけるのに苦労しています。

Xor 関数は次のとおりです。

public static String encXor(String s)
{
    String s1 = "password";
    String s2 = null;
    byte abyte0[] = s.getBytes();
    byte abyte1[] = s1.getBytes();
    int i = 0;
    int j = abyte1.length;
    ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(abyte0.length);
    for(int k = 0; k < abyte0.length; k++)
    {
        byte byte0 = abyte0[k];
        byte byte1 = abyte1[i];
        byte byte2 = (byte)(byte0 ^ byte1);
        if(i < j - 1)
            i++;
        else
            i = 0;
        bytearrayoutputstream.write(byte2);
    }

    try
    {
        bytearrayoutputstream.flush();
        s2 = bytearrayoutputstream.toString();
        bytearrayoutputstream.close();
        bytearrayoutputstream = null;
    }
    catch(IOException ioexception) { }
    return s2;
}

どんな助けでも大歓迎です:-)

4

2 に答える 2

1

私はこの問題を発見しました。これはコードに関連したものではなく、実際にはいくつかの起動パラメータに関連していました。Tomcat7w.exe を使用すると、Java タブに次の行があることに気付きました。

-Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8

これらの行を削除し、Tomcat サービスを再起動すると、すべてが機能したため、コードを変更する必要はありませんでした。

回答してくれたすべての人に感謝します:-)

于 2013-11-05T09:00:22.423 に答える