Как преобразовать шестнадцатеричные экранированные символы в символы Юникода?

Я переделываю старую конфигурацию Emacs/Gnus, созданную до Unicode Emacs (21.3 или 22). В этой конфигурации я использовал некоторые символы Юникода для отображения потоков 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.

Чтобы исключить проблему экранирования или решить ее, как я могу получить символы Юникода, чтобы использовать экранирование \u1234 вместо \x12345 ? Спасибо.

Редактировать: Благодаря Emacs-22 я смог вставить эти символы в буфер и найти их код с помощью C-uC-x= .

Соответствие

(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 "))

... но отображение не такое красивое, как было в то время, когда были выбраны эти символы Юникода. Это было в другой системе, и я полагаю, что шрифт был более приятным для их отображения.


person Seki    schedule 03.10.2013    source источник


Ответы (2)


Я предлагаю вам запустить более старый Emacs (Emacs-22), заставить его отображать эти строки, чтобы вы могли видеть эти красивые изогнутые стрелки, а затем скопировать и вставить их с помощью мыши (нет необходимости использовать нотацию \uNNN).

person Stefan    schedule 03.10.2013
comment
Я переустановил старый Emacs-22, чтобы правильно декодировать символы. Как упоминалось в JSON, мой текущий Emacs не может их правильно понять. - person Seki; 04.10.2013

Теоретически (decode-coding-string "\x490a4 " 'emacs-mule) должен делать то, что вы хотите, но, похоже, он не распознает этот символ, возможно, потому, что он был расширением MULE для поддержки большего количества символов Unicode.

Я думаю, что самым простым решением будет визуально найти нужные стрелки и заменить эти коды их кодовыми точками Unicode. См. Стрелки (блок Unicode) в Википедии для получения списка потенциальных кандидатов.

person JSON    schedule 03.10.2013
comment
спасибо за подсказку, я часто использую Emacs для кодирования/преобразования текста, но я мало знаю о внутренностях. Я подтверждаю, что мой Emacs не дает правильного результата по сравнению с Emacs-22 с экранированными символами в древней кодировке. - person Seki; 04.10.2013