为什么打印的unicode字符会更改?

时间:2019-05-20 07:32:48

标签: unicode clojure read-eval-print-loop

unicode符号的显示方式取决于在其之前是否使用白色粗体复选标记或负方形标记。如果我这样做,则警告标志会变色。如果在符号之间放置空格,则会得到单色的类似文本的版本。

为什么存在此行为,我可以以某种方式强制使用彩色符号吗?

我尝试了几种不同的REPL,其行为是相同的。

; No colour
(str (char 0x274e) " " (char 0x26A0))
; Coloured
(str (char 0x274e) "" (char 0x26A0))

Clojure unicode display

我希望符号以相同的方式显示,而不管其前是哪个符号。

2 个答案:

答案 0 :(得分:1)

  

为什么存在这种行为

一个供应商认为,用彩色字体渲染表情符号glyhps是一个好主意。这个想法流行起来。

https://en.wikipedia.org/wiki/Emoji#Emoji_versus_text_presentation

  

我可以以某种方式强制使用彩色符号

U + FE0E变量选择器15和U + FE0F变量选择器16

http://mts.io/2015/04/21/unicode-symbol-render-text-emoji/

答案 1 :(得分:1)

Unicode是关于字符(代码点)的,而不是字形(将其视为字符的“图像”)。

字体可以自由(并且应该)将附近的字符合并为单个字形。在印刷的拉丁文字中,这不是很常见(但我们可以使用ff,fi,ffi),而无需考虑组合代码点,根据定义,该代码点应与其他字符组合,仅得到一个字形,

许多其他脚本需要它。从草书拉丁文字开始,但大多数草书都需要更改。例如。阿拉伯语的开头,结尾,中间或分隔字符有不同的字形(+特别组合,对于草书来说是常见的)。印度文字具有类似的行为。

所以Unicode的基础已经具有了这种特性,现代的好字体应该能够做到这一点。

还不算太晚,表情符号使用了这样的功能,例如其他常见情况的国家字母/标志。

通常Unicode文档会告诉您这种可能性以及可能会改变行为的特殊代码点,但是字体的任务是完全实现预期的行为(并找到良好的字形)。

所以:字符(作为Unicode代码点)与设计(字形)不是一对一的。

相关问题