我知道我可以使用import rx
source = rx.Observable.create(buy_stock_events)
语法来获得字符的代码点。
?a
但是当iex> ?a
97
是二进制数a
时该怎么办?在这种情况下如何获取代码点?
答案 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