UTF-8字符串到序号值:Python输出的Java等价物

UTF-8字符串到序号值:Python输出的Java等价物,java,python,utf-8,byte,utf,Java,Python,Utf 8,Byte,Utf,我觉得这很可能是一个复制品,但我找不到 注意:我的Python知识非常有限,所以我不能100%确定字符串、字节和编码是如何在Python中完成的。一般来说,我对编码的了解也不太多 假设我们有字符串“Aä$$€h”。它包含三个不同的普通ASCII字符(A$h),和两个非ASCII字符(ä€)。在Python中,我们有以下代码: #编码:utf-8 输入=u'Aä$$€h' 打印[ord(c)表示输入中的c。编码('utf-8')] #按字符分组: 打印[[ord(x)代表c中的x.encode('

我觉得这很可能是一个复制品,但我找不到

注意:我的Python知识非常有限,所以我不能100%确定字符串、字节和编码是如何在Python中完成的。一般来说,我对编码的了解也不太多

假设我们有字符串
“Aä$$€h”
。它包含三个不同的普通ASCII字符(
A$h
),和两个非ASCII字符(
ä€
)。在Python中,我们有以下代码:

#编码:utf-8
输入=u'Aä$$€h'
打印[ord(c)表示输入中的c。编码('utf-8')]
#按字符分组:
打印[[ord(x)代表c中的x.encode('utf-8')]代表c中的输入\ U代码]
这将输出:

[651951643636226130172104]
[[65], [195, 164], [36], [36], [226, 130, 172], [104]]

现在,我正在寻找一个Java等价物,它提供相同的整数数组。我知道Java中的所有字符串都默认使用UTF-16编码,并且只有字节数组可以有实际的编码。我认为下面的代码会给出我期望的结果:

String input=“Aä$$€h”;
byte[]byteArray=input.getBytes(java.nio.charset.StandardCharsets.UTF_8);
System.out.println(java.util.array.toString(byteArray));
但不幸的是,它给出了以下结果:

[65、-61、-92、36、36、-30、-126、-84、104]

我不确定这些负值是从哪里来的

所以我的问题主要是:


给定Java中包含非ASCII字符的字符串(即,
“aä$$€h”
),输出其顺序UTF-8整数,类似于Python
ord
-函数对UTF-8编码字节的处理。这个问题的第一部分,因为我们已经有了一个Java字符串,是这个问题的先决条件。

Java
byte
是有符号的,这就是负数的来源。就位而言,两种语言中的数字值相同,它们的表示方式不同。您可以使用以下方法获得与python中相同的表示形式:


啊,这就是这里的区别。谢谢如果可以的话,我会在几分钟内接受你的回答。“Java中的所有字符串默认使用UTF-16编码”:从API的角度来看(尤其是
.length
),没有其他选项。
String input = "Aä$$€h";
byte[] byteArray = input.getBytes(java.nio.charset.StandardCharsets.UTF_8);
int[] ints = new int[byteArray.length];
for(int i = 0; i < ints.length; i++) {
    ints[i] = Byte.toUnsignedInt(byteArray[i]);
}
System.out.println(java.util.Arrays.toString(ints));
[65, 195, 164, 36, 36, 226, 130, 172, 104]