Как конвертировать кодировку 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, см. эти вопросы и ответы.

Другие вопросы по тегам