Как конвертировать кодировку win1251 в UTF8 внутри Kotlin?
Я делаю HTTP-запрос на страницу. На этой странице есть кириллические символы. Как я могу конвертировать ответ в CP1251 в UTF8?
Вот мой код
package bash
import com.github.kittinunf.fuel.httpGet
import com.github.kittinunf.result.Result
fun main(args: Array<String>) {
val bashImHost = "http://bash.im/"
bashImHost.httpGet().responseString { request, response, result ->
when (result) {
is Result.Failure -> {
println("Some kind of error!")
}
is Result.Success -> {
val htmlBody = result.value
val parsePattern = "<div class=\"text\">(.+)</div>"
val parseRegex = Regex(parsePattern)
val results = parseRegex.findAll(htmlBody)
results.iterator().forEach { resultItem -> println(resultItem.groups[1]?.value) }
}
}
}
}
Я использую HTTP-библиотеку Fuel.
1 ответ
Решение
Использовать responseString
перегрузка, которая принимает Charset
чтобы он декодировал ответ, используя Charset.forName("Windows-1251")
:
bashImHost.httpGet().responseString(Charset.forName("Windows-1251")) {
request, response, result ->
/* ... */
}
Похоже, вы не можете изменить кодировку ответа для Windows-1251 после того, как он был преобразован в String
используя неправильную кодировку UTF-8, см. эти вопросы и ответы.