gpt4 book ai didi

java - 为什么 UTF-8 和 UTF-16 编码的字符串在 Java 中打印不一样?

转载 作者:行者123 更新时间:2023-11-30 03:57:11 26 4
gpt4 key购买 nike

我不明白为什么这段代码没有输出相同的东西?我以为Java会自动计算出字符串的编码?

public static void main (String[] args) {
try {
displayStringAsHex("A B C \u03A9".getBytes("UTF-8"));
System.out.println ("");
displayStringAsHex("A B C \u03A9".getBytes("UTF-16"));
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
}

/**
* I got part of this from: http://rgagnon.com/javadetails/java-0596.html
*/
public static void displayStringAsHex(byte[] raw ) {
String HEXES = "0123456789ABCDEF";
System.out.println("raw = " + new String(raw));
final StringBuilder hex = new StringBuilder( 2 * raw.length );
for ( final byte b : raw ) {
hex.append(HEXES.charAt((b & 0xF0) >> 4))
.append(HEXES.charAt((b & 0x0F))).append(" ");
}
System.out.println ("hex.toString() = "+ hex.toString());
}

输出:

(UTF-8)
hex.toString() = 41 20 42 20 43 20 CE A9

(UTF 16)
hex.toString() = FE FF 00 41 00 20 00 42 00 20 00 43 00 20 03 A9

我无法显示字符输出,但 UTF-8 版本看起来是正确的。 UTF-16版本有几个方 block 和 block 。

为什么它们看起来不一样?

最佳答案

Java 不会自动找出字符串的编码。

String(byte[])构造函数

constructs a new String by decoding the specified array of bytes using the platform's default charset.`

在您的情况下,UTF-16 字节被解释为 UTF-8,最终会得到垃圾。使用 new String(raw, Charset.forName("UTF-16")) 重建字符串。

关于java - 为什么 UTF-8 和 UTF-16 编码的字符串在 Java 中打印不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22876596/

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