首页 > 解决方案 > 使用 Kotlin 从字符串中的字符获取 unicode 值

问题描述

我有以下字符串是阿拉伯语:

عضو منذ ‏14 نوفمبر، 2009

乍一看,数字 14 之前似乎有一个空格,但事实并非如此。我无法确定这个角色是什么。我试过 isEmpty, isBlank, .equals(""), == null 但没有返回 true。如何检索该位置字符的 unicode 值?为了只提取字符,我这样做:

memberSinceText.substring(8, 9)

标签: kotlinunicode

解决方案


如果我们逐个查看字符并打印它们的 unicode-counterpart,使用:

val memberSinceText = "عضو منذ ‏14 نوفمبر، 2009"

memberSinceText.toCharArray()
  .forEachIndexed { pos, c ->
    println("$pos. $c -> ${String.format("\\%04x", c.toInt())}")
}

我们得到一个类似于以下的输出(稍微修改并添加了一些注释;由于同一行中的值,它不是那么容易复制和粘贴):

 0. ع -> \0639
 1. ض -> \0636
 2. و -> \0648
 3.   -> \0020 // Space
 4. م -> \0645
 5. ن -> \0646
 6. ذ -> \0630
 7.   -> \0020 // Space
 8. 200f\ <-   // actually omitting the symbol here due to copy&paste-problems
 9. 1 -> \0031
10. 4 -> \0034
11.   -> \0020 // Space
12. ن -> \0646
13. و -> \0648
14. ف -> \0641
15. م -> \0645
16. ب -> \0628
17. ر -> \0631
18. ، -> \060c
19.   -> \0020 // Space
20. 2 -> \0032
21. 0 -> \0030
22. 0 -> \0030
23. 9 -> \0039

所以实际上......在 之前和之后有一个空格14,但在位置 8 也有一些其他特殊字符。如果我们看一下它基本上是什么,我们会得到(在应用我们的 RTL 视觉之后):\u200f这基本上是正确的-向左标记。

在某些上下文中单独打印该符号:

memberSinceText.substring(8, 9).also {
  println(">$it|")
}

将打印:(|<注意方向)。但是,打印substring(7,8)将为您提供空格字符:> |


推荐阅读