Unicode 在Clojure源代码中使用表情文字

Unicode 在Clojure源代码中使用表情文字,unicode,clojure,emoji,Unicode,Clojure,Emoji,在启用UTF-8的Linux控制台上: Clojure 1.6.0 用户=>(定义c\の) #'用户/c 用户=>(strc) "の" user=>(def c\Java表示UTF-16中的Unicode字符。表情符号是“补充字符”,其代码点不能用16位表示 本质上,补充字符不是用字符表示的,而是用整数表示的,并且有专门的API来处理它们 一种方法是使用(Character/toChars 128516)-这将返回一个字符数组,您可以将其转换为要打印的字符串:(apply str(Charac

在启用UTF-8的Linux控制台上:

Clojure 1.6.0
用户=>(定义c\の)
#'用户/c
用户=>(strc)
"の"

user=>(def c\Java表示UTF-16中的Unicode字符。表情符号是“补充字符”,其代码点不能用16位表示

本质上,补充字符不是用字符表示的,而是用整数表示的,并且有专门的API来处理它们

一种方法是使用
(Character/toChars 128516)
-这将返回一个字符数组,您可以将其转换为要打印的字符串:
(apply str(Character/toChars 128516))
。或者您可以直接使用
(string.(int array[128516])0 1从一个代码点整数数组创建一个字符串
。这取决于Java/Clojure和您的眼球之间的各种事情,可能会也可能不会满足您的需要

format api支持补充字符,这可能是最简单的,但是它需要一个int,因此您需要强制转换:
(格式“Smile!%c”(int 128516))

多亏了Clojure,您可以轻松地创建Unicode文本

我们已经知道,并非所有的Unicode都可以表示为
char
文本;JVM上Unicode字符的首选表示形式是
int
;字符串文本可以以方便人类阅读的方式保存任何Unicode字符


所以,一个带标签的文字
#u“,因为我希望使用字符文字-但你是对的“上下文:请注意,UTF-16自本世纪初以来就没有16位宽——这是一个常见的误解。它是16位宽还是32位宽,取决于所表示的代码点。虽然Java确实在内部使用UTF-16,但它从v1.5开始就支持这两种位宽(比Clojure目前支持的最旧JVM还要旧)。