У меня такое ощущение, что это, скорее всего, дубликат, но я не могу его найти.
ПРИМЕЧАНИЕ: мои знания Python очень ограничены, поэтому я не уверен на 100%, как строки, байтыи кодировки выполняются в Python.Мои знания о кодировках в целом также не слишком велики ..
Допустим, у нас есть строка "Aä$$€h"
.Он содержит три разных обычных символа ASCII (A$h
) и два не-ASCII символа (ä€
).В Python у нас есть следующий код:
# coding: utf-8
input = u'Aä$$€h'
print [ord(c) for c in input.encode('utf-8')]
# Grouped per character:
print [[ord(x) for x in c.encode('utf-8')] for c in input_code]
, который будет выводить:
[65, 195, 164, 36, 36, 226, 130, 172, 104]
[[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.Arrays.toString(byteArray));
Но, к сожалению, вместо этого он дает следующий результат:
[65, -61, -92, 36, 36, -30, -126, -84, 104]
Попробуйте онлайн.
Я не уверен, откуда берутся эти отрицательные значения ..
Так что мой вопрос в основном такой:
Учитывая строку в Java, содержащуюне-ASCII-символы (т. е. "Aä$$€h"
), выводят свои порядковые целые числа UTF-8, аналогично функции Python ord
для байта, кодированного в UTF-8.Первая часть этого вопроса, поскольку у нас уже есть строка Java, является предварительным условием для этого вопроса.