当前位置: 首页 > 面试题库 >

Java汉字的UTF编码Java

东门秦迟
2023-03-14
问题内容

我正在通过对象从轴Web服务接收字符串。因为我没有得到我期望的字符串,所以我通过将字符串转换为字节进行了检查,然后在hexa中得到了C3A4C2
BDC2A0 C3A5C2 A5C2BD C3A5C2 90C297,当我期望使用E4BDA0 E5A5BD E59097时,实际上在UTF- 8。

有什么想法会导致您好吗成为C3A4C2 BDC2A0 C3A5C2 A5C2BD C3A5C2
90C297?我进行了Google搜索,但得到的只是一个中文网站,描述了python中发生的问题。任何见解都会很棒,谢谢!


问题答案:

您拥有所谓的双重编码。

您正确指出的三个字符序列“你好吗”以UTF-8编码为E4BDA0 E5A5BD E59097。

但是现在,开始以UTF-8编码THAT编码的每个字节。从E4开始。UTF-8 中的 代码点是什么?试试吧!是C3 A4!

你知道这个主意… :-)

这是一个Java应用程序,说明了这一点:

public class DoubleEncoding {
    public static void main(String[] args) throws Exception {
        byte[] encoding1 = "你好吗".getBytes("UTF-8");
        String string1 = new String(encoding1, "ISO8859-1");
        for (byte b : encoding1) {
            System.out.printf("%2x ", b);
        }
        System.out.println();
        byte[] encoding2 = string1.getBytes("UTF-8");
        for (byte b : encoding2) {
            System.out.printf("%2x ", b);
        }
        System.out.println();
    }

}



 类似资料:
  • 我试图理解Java中的字符编码。Java中的字符使用UTF-16编码以16位存储。因此,当我将一个包含6个字符的字符串转换为字节时,我得到了6个字节,如下所示,我期望它是12。我是不是漏掉了什么概念? O/p:字符数组的长度为6 按照@Darshan的说法,当尝试使用UTF-16编码获取字节时,结果也不是预期的。

  • 问题内容: 我试图理解Java中的字符编码。Java中的字符使用UTF-16编码以16位存储。因此,当我将包含6个字符的字符串转换为字节时,我将得到如下所示的6个字节,但我希望它是12。是否缺少任何概念? O / p:字符数组的长度为6 根据@Darshan尝试使用UTF-16编码获取字节时,结果也不期望。 问题答案: 在UTF-16版本中,由于插入了一个标记来区分Big Endian(默认)和L

  • 问题内容: 我遇到了这行遗留代码,我试图找出这些遗留代码: 据我了解,它是使用相同的charSet进行编码和解码。 这与以下内容有何不同? 在任何情况下,两条生产线的输出将不同? ps:只是要澄清一下,是的,我知道Joel Spolsky撰写的关于编码 的出色文章! 问题答案: 这可能是很复杂的方式 这缩短了String,而所使用的基础char []则更长。 但是,更具体地说,将检查每个字符是否都

  • 问题内容: 我有一个带有“ñ”字符的字符串,并且我有一些问题。我需要将此字符串编码为UTF-8编码。我已经通过这种方式尝试过,但是没有用: 如何将该字符串编码为utf-8? 问题答案: Java中的对象使用无法修改的UTF-16编码。 唯一可以使用不同编码的是。因此,如果你需要UTF-8数据,则需要一个。如果你有一个包含意外数据的,则问题出在较早的地方,该错误地将一些二进制数据错误地转换为a (即

  • 问题内容: 目前,我正在尝试开始使用Spring MVC。在尝试时,我遇到了编码问题。 我想在我的JSP页面上显示UTF-8字符,所以我在ModelAndView中添加了一个带有UTF-8字符的字符串。看起来像这样: 在JSP页面上,我只想显示具有UTF-8字符的字符串,如下所示: 结果,我得到以下结果: 请注意,下面的代码显示没有编码错误。我还在Springsource Tool Suite中将

  • 我想知道是否有人能帮忙,我很难将UTF-8字符发布到SagePay。数据库是MySQL,带有数据库字符集utf8和数据库排序规则utf8_general_ci。数据库连接字符串使用useUnicode=true 所有发布到数据库的数据都存储为UTF-8,所有查询的数据都显示为UTF-8,但当字符串编码如下时: 然后发到SagePay,他们会收到一个来自国际字符所在位置的乱码字符串。如果字符串中不包