使用Kotlin从字符串中的字符获取unicode值

时间:2019-05-23 12:02:21

标签: kotlin unicode

我有以下阿拉伯字符串:

عضومنذ14نوفمبر,2009

乍看之下,数字14前面似乎有一个空格,但这不是事实。我无法确定此字符是什么。我试过了isEmpty,isBlank,.equals(“”),== null,但是没有任何返回true。如何在该位置检索字符的unicode值?要提取字符,我可以这样做:

bar

1 个答案:

答案 0 :(得分:1)

如果我们逐个查看字符并使用以下命令打印其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)会为您提供空格字符:> |