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
相关产品推荐
相关产品推荐

