如何将十六进制转义字符转换为unicode字符?

时间:2013-10-03 00:40:23

标签: emacs unicode elisp gnus

我正在修改一个可以在unicode Emacs(21.3或22)之前发现的旧Emacs / Gnus配置。在这个配置中,我使用了一些unicode字符来显示usenet线程:

  (setq gnus-sum-thread-tree-root "\x490a4 ")     ; "> "
  (setq gnus-sum-thread-tree-false-root "\x490a4 ") ; "> "
  (setq gnus-sum-thread-tree-indent " ") ; "  "
  (setq gnus-sum-thread-tree-single-indent "") ; ""
  (setq gnus-sum-thread-tree-leaf-with-other "\x4903c\x49020\x4904c\x490f9 ") ; "+-> "
  (setq gnus-sum-thread-tree-vertical "\x49022 ") ; "| "
  (setq gnus-sum-thread-tree-single-leaf "\x490b0\x49020\x490f9 "))   ; "\\-> "

但是现在使用Emacs 23.2.1我看到空方块而不是弯曲箭头。我怀疑它可能是字体集或与unibyte / multibyte相关的转义问题。

要排除转义问题或解决问题,如何检索unicode字符以使用\u1234转义而不是\x12345?感谢。

编辑:感谢Emacs-22,我能够将这些字符插入缓冲区,并使用 Cu Cx <找到它们的代码KBD> = 。

对应是

(setq gnus-sum-thread-tree-root "\u2564 "
        gnus-sum-thread-tree-false-root "\u2564 "
        gnus-sum-thread-tree-leaf-with-other "\u251c\u2500\u252c\25b9 "
        gnus-sum-thread-tree-vertical "\u2502 "
        gnus-sum-thread-tree-single-leaf "\u2570\u2500\u25b9 "))

...但显示效果不如选择这些unicode字符时那么好。它出现在另一个系统上,我认为显示它们的字体更好。

2 个答案:

答案 0 :(得分:1)

我建议你点一个旧的Emacs(Emacs-22),让它显示那些字符串,这样你就可以看到那些漂亮的弯曲箭头,然后用鼠标复制和粘贴它们(不需要使用\uNNN符号)。

答案 1 :(得分:1)

理论上(decode-coding-string "\x490a4 " 'emacs-mule)应该做你想要的,但它似乎没有认识到这个角色,也许是因为它是从MULE的扩展来支持更多的Unicode角色。

我认为最简单的解决方案是直观地找到您想要的箭头,并用Unicode代码点替换这些代码。请参阅维基百科中的Arrows (Unicode block)以获取潜在候选人的列表。