gpt4 book ai didi

java - 怎么可能从java中的不同字节数据中获取相同的字符串?

转载 作者:搜寻专家 更新时间:2023-11-01 03:52:29 25 4
gpt4 key购买 nike

我在将字节转换为 Java 中的 UTF8 字符串时发现了一个奇怪的问题。为什么bytes1和bytes2不一样,而str1和srt2是一样的?

这是测试代码。

import org.apache.commons.codec.binary.Hex;

public class MyTest {
public static void main(String[] args) throws Exception {
byte[] bytes1 = Hex.decodeHex("EDA0BDEDB88A".toCharArray());
byte[] bytes2 = Hex.decodeHex("F09F988A".toCharArray());

System.out.println("bytes1 length: " + bytes1.length);
System.out.println("bytes2 length: " + bytes2.length);

String str1 = new String(bytes1, "utf8");
String str2 = new String(bytes2, "utf8");

System.out.println("str1 is equals str2? " + str1.equals(str2));
}
}

这里是jdk7上运行的测试代码的输出

bytes1 length: 6
bytes2 length: 4
str1 is equals str2? true

是否可以找出'EDA0BDEDB88A'和'F09F988A'之间的关系?

'F09F988A' 是一个 unicode smail face , 但 'EDA0BDEDB88A' 未知。

最佳答案

字节序列 F09F988A 和 EDA0BDEDB88A 都被 Java 解码为相同的代码点 U+1F60A(微笑的脸和微笑的眼睛)。

即使编码 EDA0BDEDB88A 不正确,它也会被 Java UTF-8 实现接受为每个代理代码点 U+D83D 和 U+DE0A 的单独 UTF-8 编码。然而,严格来说,这种表示在 UTF-8 中是不允许的,但是例如在 CESU-8(UTF-16 兼容编码方案)中定义。

关于java - 怎么可能从java中的不同字节数据中获取相同的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com