我想知道是否有人可以请求帮助,我很难发布UTF-8字符到SagePay。数据库是带有数据库字符集utf8和数据库排序规则utf8_general_ci的MySQL。数据库连接字符串使用useUnicode = true & characterEncoding = UTF-8并且jsp页面正确编码为<%@ page pageEncoding =“UTF-8”contentType =“text/html; charset = UTF-8”%>Java 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;
}
任何帮助,将不胜感激:-)
谢谢,我已经试过了,但编译类时,我得到的错误未报告异常java.io.UnsuportedEncodingException必须捕获或声明被抛出。 – iggyweb
请参阅由@artbristol编辑的最新版本。 – Henry
@iggyweb:你需要捕捉异常;除非在代码中存在拼写错误,否则不会抛出它。 –