我想知道是否有人可以帮忙,我很难将 UTF-8 字符发布到 SagePay。数据库是 MySQL,具有数据库字符集 utf8 和数据库排序规则 utf8_general_ci。数据库连接字符串使用 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 但努力寻找解决方案。
异或函数如下:
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;
}
任何帮助将非常感激 :-)