Кодировать строку в UTF-8 в Котлине - PullRequest
1 голос
/ 20 июня 2019

Часто при работе с json и ответами вы хотите закодировать строку в UTF-8 в java.

String response = new String(response.data, UTF); // java code

Для Kotlin, как это сделать?Я преобразовал свой класс Java, и в результате получилось

String response = String(response.data, UTF) // kotlin code

Но это приводит к ошибке, поскольку я считаю, что метод Kotlin String () отличается от того, что я делаю в Java.Это так же просто, как использовать toString ()?

String response = response.data.toString() // kotlin code

Как система знает, как использовать UTF-8, или это просто по умолчанию?Это просто гипотетически, но что, если я хотел что-то сделать с объектом String и поэтому использовал UTF-16?Как я могу изменить кодировку?

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

Котлин имеет перегрузку из ByteArray.toString, принимая Charset. Все, что вам нужно сделать, это использовать его: array.toString(charset).

Я не могу найти раздел в документации, в котором указано, что ByteArray.toString() делает правильные вещи, поскольку не в Java и такое поведение, вероятно, сохраняется в Kotlin. Я бы догадался, что это неправильно. Я рекомендую использовать toString(charset) явно.

1 голос
/ 21 июня 2019

Kotlin 1.3.40 обеспечивает экспериментальную общую ByteArray.decodeToString функцию.

Он принимает ByteArray, содержащий байты строки, закодированные в кодировке utf8, и декодирует ее в kotlin String. Таким образом, вы можете использовать его как:

String response = response.data.decodeToString()

Обратите внимание, что для использования этой функции необходимо включить экспериментальный API stdlib. Вы можете узнать больше о поддерживаемых способах сделать это здесь: https://kotlinlang.org/docs/reference/experimental.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...