将单字符字符串转换为其代码点

时间:2019-02-17 08:30:56

标签: elixir

我知道我可以使用import rx source = rx.Observable.create(buy_stock_events) 语法来获得字符的代码点。

?a

但是当iex> ?a 97 是二进制数a时该怎么办?在这种情况下如何获取代码点?

2 个答案:

答案 0 :(得分:4)

当心UTF-8分解形式。在进一步处理(将:nfc作为第二个参数传递)之前,在输入上调用String.normalize/2总是更安全。

可能会想到

<<cp::utf8>> = "á"

可以工作,但是会提高

<<cp::utf8>> = "á"

效果很好。上面没有错字,第一个示例中的 "á" 和第二个示例中的 "á" 是不同的。

"á" == "á"
#⇒ false

为了安全地匹配合成和分解的对象,无论如何,可以预先将其明确标准化为组成的

with <<cp::utf8>> <- String.normalize("á", :nfc),
  do: cp
#⇒ 225

以上所有示例都是可复制粘贴的。

"á"
|> String.normalize(:nfc)
|> String.to_charlist()
|> hd()
#⇒ 225

但是

"á"
|> String.to_charlist()
|> hd()
#⇒ 97

答案 1 :(得分:2)

您可以使用二进制模式匹配:

"a"

或使用String.to_charlist/1,然后提取第一个值:

iex(1)> <<codepoint::utf8>> = "a"
"a"
iex(2)> codepoint
97