来自文件(InputStream)的非转义UTF-8字符



我正在尝试取消"u00f6"到它们的UTF-8表示。

。文件包含"应该变成"Aalkörben"

val tmp = text.toByteArray(Charsets.UTF_8)
val escaped = tmp.decodeToString()
// or val escaped = tmp.toString(Charsets.UTF_8)

当我手动将字符串设置为" alku00f6rben",这工作得很好。然而,当从文件中读取字符串时,它被解释为"使用斜杠转义(两个斜杠)并且转义失败

是否有办法说服Kotlin转换特殊字符?我宁愿不使用像Apache这样的外部库。

我不知道你是如何读取文件的,但最可能发生的是…被读为六个单个字符,并且反斜杠可能被转义了。你可以在调试器中检查。

所以我的假设是,在内存中你有" alk\u00f6rben"。试着替换:

val result = text
.replace("\u00f6", "u00f6")
.toByteArray(Charsets.UTF_8)
.decodeToString()

编辑:这应该取代所有转义的4字节字符:

val text = Pattern
.compile("\\u([0-9A-Fa-f]{4})")
.matcher(file.readText())
.replaceAll { matchResult -> matchResult.group(1).toInt(16).toChar().toString() }

最新更新