pull/540/head
parent
ba6fc2e5d1
commit
ccedfdbfd3
@ -0,0 +1,33 @@ |
|||||||
|
package io.legado.app.help.http |
||||||
|
|
||||||
|
import io.legado.app.utils.EncodingDetect |
||||||
|
import io.legado.app.utils.UTF8BOMFighter |
||||||
|
import okhttp3.Response |
||||||
|
import rxhttp.wrapper.annotation.Parser |
||||||
|
import rxhttp.wrapper.exception.HttpStatusCodeException |
||||||
|
import java.nio.charset.Charset |
||||||
|
|
||||||
|
@Parser(name = "Text") |
||||||
|
class TextParser(val encode: String? = null) : rxhttp.wrapper.parse.Parser<String> { |
||||||
|
|
||||||
|
override fun onParse(response: Response): String { |
||||||
|
|
||||||
|
val responseBody = response.body() ?: throw HttpStatusCodeException(response, "内容为空") |
||||||
|
val responseBytes = UTF8BOMFighter.removeUTF8BOM(responseBody.bytes()) |
||||||
|
var charsetName: String? = encode |
||||||
|
|
||||||
|
charsetName?.let { |
||||||
|
return String(responseBytes, Charset.forName(charsetName)) |
||||||
|
} |
||||||
|
|
||||||
|
//根据http头判断 |
||||||
|
responseBody.contentType()?.charset()?.let { |
||||||
|
return String(responseBytes, it) |
||||||
|
} |
||||||
|
|
||||||
|
//根据内容判断 |
||||||
|
charsetName = EncodingDetect.getHtmlEncode(responseBytes) |
||||||
|
return String(responseBytes, Charset.forName(charsetName)) |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue