Kotlin:字符串换行符不是 trim 由 trim() 函数
Kotlin: String newline not trimmed by trim() function
我从 json 文件(阿拉伯语 json 文件以前从 txt 文件解析)中检索了两个字符串。从 json 解析后,我使用 kotlin trim()
函数删除前导和尾随换行符。问题是,其中一个文件 1 被成功修剪,而另一个文件 2 没有被修剪。
我想到了编码,但一直没能搞定。我所知道的是 json 文件很可能是从 utf-8 源代码编码的。所以我用 Kotlin 字符串函数 toByteArray(Charsets.UTF-8).contentToString
:
转换这两个文件
file1
始终具有:[32, 10] 作为其字节数组中的最后一个元素(换行符应位于此处)。
file2
总是有:[32, 10, -30, -128, -113] 作为其字节数组中的最后一个元素(换行符应该是).
听起来文件末尾有额外的三个字节字符有问题(我不知道这些减号代表什么)。
这是我获取 json 和创建 JSONOBject 的方法:
val file: String = applicationContext.assets.open("poets/${poetID}.txt").bufferedReader().use {
it.readText()
}
val json = JSONObject(file)
这里,${poetID}.txt
实际上是资产文件夹poets/
中的json文件。
我用 Swift 编写了相同的应用程序,没有出现此类问题。
我的问题是:末尾的这些assitional字节是什么?有没有办法检查从 json 文件解析的字符串的编码?或者以编程方式更改编码的方法?
我找到了答案。附加字符代表从右到左标记。它是阿拉伯语中常见的 unicode 字符。
我从 json 文件(阿拉伯语 json 文件以前从 txt 文件解析)中检索了两个字符串。从 json 解析后,我使用 kotlin trim()
函数删除前导和尾随换行符。问题是,其中一个文件 1 被成功修剪,而另一个文件 2 没有被修剪。
我想到了编码,但一直没能搞定。我所知道的是 json 文件很可能是从 utf-8 源代码编码的。所以我用 Kotlin 字符串函数 toByteArray(Charsets.UTF-8).contentToString
:
file1
始终具有:[32, 10] 作为其字节数组中的最后一个元素(换行符应位于此处)。
file2
总是有:[32, 10, -30, -128, -113] 作为其字节数组中的最后一个元素(换行符应该是).
听起来文件末尾有额外的三个字节字符有问题(我不知道这些减号代表什么)。
这是我获取 json 和创建 JSONOBject 的方法:
val file: String = applicationContext.assets.open("poets/${poetID}.txt").bufferedReader().use {
it.readText()
}
val json = JSONObject(file)
这里,${poetID}.txt
实际上是资产文件夹poets/
中的json文件。
我用 Swift 编写了相同的应用程序,没有出现此类问题。
我的问题是:末尾的这些assitional字节是什么?有没有办法检查从 json 文件解析的字符串的编码?或者以编程方式更改编码的方法?
我找到了答案。附加字符代表从右到左标记。它是阿拉伯语中常见的 unicode 字符。