You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中URL.readText()返回字符串乱码问题求助

解决Kotlin中URL.readText()读取字符串乱码的问题

你遇到的是典型的字符编码不匹配导致的乱码问题——你指定用UTF-8解析内容,但服务器返回的实际编码可能并非UTF-8,这就使得像ė这类特殊字符被错误解析成了�。下面给你几个可行的解决思路:

  • 自动适配服务器返回的编码:
    不要硬编码UTF-8,而是从服务器的响应头里提取实际的字符编码,这样能最大程度避免编码不匹配的问题:

    fun getCurrentTitle() {
        doAsync {
            val url = URL("http://10.0.0.8:4800/${Utils.TITL}")
            val connection = url.openConnection()
            // 从Content-Type头提取编码,默认用UTF-8兜底
            val charsetName = connection.contentType
                ?.substringAfter("charset=", "")
                ?.takeIf { it.isNotBlank() } ?: "UTF-8"
            val str = connection.getInputStream()
                .reader(Charset.forName(charsetName))
                .readText()
            uiThread {
                current_song_title.text = str
                println(str)
            }
        }
    }
    
  • 尝试常见的替代编码:
    如果服务器没有返回编码头,你可以试试ISO-8859-1或者Windows-1252这类编码——很多时候乱码都是因为把这类编码的内容当成UTF-8解析了:

    val str = URL("http://10.0.0.8:4800/${Utils.TITL}").readText(Charset.forName("ISO-8859-1"))
    
  • 快速验证TextView字符支持:
    虽然浏览器能正常显示,但可以确认下你的TextView是否使用了支持特殊字符的字体(系统默认字体一般都支持,但自定义字体可能存在兼容问题)。不过这个概率较低,优先排查编码问题即可。

内容的提问来源于stack exchange,提问作者Milos Lulic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:22:31