【问题标题】:Encode String to UTF-8 in Kotlin在 Kotlin 中将字符串编码为 UTF-8
【发布时间】:2019-11-03 13:42:03
【问题描述】:

在处理 json 和响应时,您通常希望在 java 中将 String 编码为 UTF-8。

String response = new String(response.data, UTF); // java code

对于 Kotlin,这是如何完成的?我转换了我的 Java 类,结果是

String response = String(response.data, UTF) // kotlin code

但这会导致错误,因为我相信 Kotlin String() 方法与我在 Java 中所做的不同。是不是像使用 toString() 一样简单?

String response = response.data.toString() // kotlin code

系统如何知道使用 UTF-8,或者这只是默认设置?这只是假设,但如果我想对 String 对象做一些事情并因此使用 UTF-16 怎么办?如何更改编码?

【问题讨论】:

  • 如果您从一些字节数据开始,并以字符串结尾,那么您不是 UTF8 解码吗? (这里的背景是字符(无论如何在 Java/Kotlin 中)是 16 位的,而 UTF-8 是将这些 Unicode 字符编码为 8 位字节的一种方式。所以如果response.data 已经在 UTF-8 中,那么这是解码;或者如果不是,那么我不知道这个问题是关于什么的!)

标签: java kotlin encoding character-encoding


【解决方案1】:

你可以试试这个 字符串(数据,Charsets.UTF_8)

参考:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/to-string.html

【讨论】:

  • 谢谢伙计,这应该被接受的答案,简单,容易和明确的再次感谢
【解决方案2】:

使用 kotlin 函数作为

charset("UTF-8")

使用您的数据

 String(response.data, charset("UTF-8"))

【讨论】:

    【解决方案3】:

    Kotlin 有 an overloadByteArray.toString 接受 Charset。您需要做的就是使用它:array.toString(charset)

    我在文档中找不到指定ByteArray.toString() 做正确事情的部分,因为它在Java 中没有,并且该行为可能在Kotlin 中保留。我猜它做错了。我建议明确使用toString(charset)

    【讨论】:

    • 我明白了,很简单。 Kotlin 让事情看起来更简单。只需要更多地了解该语言。谢谢你的回答,我试试看。
    • ByteArray.stringFromUtf8 似乎只适用于本机代码?
    【解决方案4】:

    Kotlin 1.3.40 提供了一个实验性通用ByteArray.decodeToString 函数。

    它需要一个ByteArray,其中包含用utf8编码的字符串字节,并将其解码为kotlinString。所以你可以像这样使用它:

    String response = response.data.decodeToString()
    

    请注意,使用此功能需要选择加入实验性 stdlib API。 您可以在此处详细了解支持的选择加入方式:https://kotlinlang.org/docs/reference/experimental.html

    【讨论】:

    • 您认为这是更好的方法吗?据推测,这意味着 ByteArray,decodeToString() 将成为新的做事方式,而 ByteArray.toString() 可能会被弃用(或不受支持),对吧?
    猜你喜欢
    • 2011-08-09
    • 2020-11-29
    • 2014-01-18
    • 2011-08-27
    • 2016-01-11
    • 2013-07-01
    • 2011-08-16
    • 2011-08-01
    相关资源
    最近更新 更多