当前位置: 首页 > 知识库问答 >
问题:

Java UTF-8编码问题

戚令秋
2023-03-14

我想知道是否有人能帮忙,我很难将UTF-8字符发布到SagePay。数据库是MySQL,带有数据库字符集utf8和数据库排序规则utf8_general_ci。数据库连接字符串使用useUnicode=true

所有发布到数据库的数据都存储为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;
}

任何帮助都将不胜感激:-)

共有2个答案

阴福
2023-03-14

我发现了这个问题,它与代码无关,但实际上与一些启动参数有关。使用Tomcat7w。我注意到Java选项卡中有以下几行:

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

我删除了这些行,重新启动了Tomcat服务,一切正常,因此不需要修改代码。

感谢所有回应:-)

逄征
2023-03-14

当你这么做的时候

byte abyte0[] = s.getBytes();
byte abyte1[] = s1.getBytes();

您使用的是Java平台编码,它可能不是UTF-8。更糟糕的是,客户机和服务器之间可能会有所不同。

尝试显式指定编码:

byte abyte0[] = s.getBytes(StandardCharsets.UTF_8);
byte abyte1[] = s1.getBytes(StandardCharsets.UTF_8);

当从字节转换回字符串时,同样适用。

 类似资料:
  • 我在将文本从UTF-8编码转换为UTF-8编码时遇到问题。这里有字节数组, 我正在将其转换为UTF-8字符串并返回字节数组, 据我所知,这是一个3字节的数组。正当但这是我得到的。 这是什么原因?据我所知,在UTF-8 Specials中,2391189组合被称为替换字符。 这也是一个更大问题的一部分。

  • 问题内容: 使用UTF-8编码创建字符串时存在不一致的地方。 运行此代码: 在Java 1.8.0_20(及更早版本)上,我们得到结果 在Java 1.7和1.6上,我们得到正确的结果: 您遇到此错误了吗?有没有解决方法? 对于Shift_JIS,JIS_X0212-1990,x-IBM300,x-IBM834,x-IBM942,x-IBM942C,x-JIS0208来说,这种不一致也很明显,但显

  • 我需要导出javascript数组到CSV文件和下载。我这么做了,但是'ó,ü,ö,ó,ş'这些字符在CSV文件中看起来像'\\\\\\\\\\\'。我已经尝试了这个网站上推荐的许多解决方案,但对我不起作用。 我添加了我的代码片段,有人能解决这个问题吗?

  • 我的内页有问题。它只是将页面识别为iso,但我想要utf-8,我将其声明为默认字符集。我尝试对freemarker配置进行一些修改,但没有效果。 springservlet。xml template.html login.html 输出

  • 我使用的是Jaspersoft Studio最终版本(v6.1.1)。我设计了我的报告,其中包含土耳其文字。从Studio导出报告为PDF时,虽然我已将Studio工作区编码设置为UTF-8,但不会显示土耳其语字符。此外,我已在JSF应用程序中嵌入jrxml报告文件并导出报告,结果是相同的。 我需要配置更多吗?

  • 我使用Java/Jsp开发了一个web应用程序,该应用程序运行在带有Tomcat 8的Ubuntu14.04 LTS服务器上,下面的UTF-8编码问题与部分符号§apperas有关。 在服务器端输入的任何章节符号§都将转换为§,我不知道为什么。 简单系统输出: