Недостающие части кодировки utf-8 в urxvt с VcXsrv

790
Warepire

Я использую сервер Arch Linux, к которому я подключаюсь с нескольких машин Windows, используя VcXsrv, чтобы я мог запускать графические приложения (и больше настраиваемых терминалов, чем то, что я могу получить с помощью PuTTY и т. Д.). Тем не менее, у меня возникли некоторые проблемы с символами urxvt и UTF-8 из раздела Дингбаты UTF-8, а именно, они не отображаются. Я использую Dingbats для отображения состояния git в командной строке, а также для отображения статуса завершения команд.

locale.conf:

LANG=en_US.UTF-8 

локаль вывода:

LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= 

Конфигурация urxvt (~ / .Xdefaults):

URxvt*scrollTtyOutput: false URxvt*scrollWithBuffer: true URxvt*scrollTtyKeypress: true URxvt*scrollBar: false URxvt*cursorBlink: true URxvt*background: black URxvt*foreground: green URxvt*font: xft:Hack:size=10, xft:Unifont:size=10 URxvt*locale: true URxvt*skipBuiltinGlyphs: true URxvt*xftAntialias: true URxvt*saveLines: 10000 URxvt*eightBitInput: false 

Информация о версии urxvt:

rxvt-unicode (urxvt) v9.22 - released: 2016-01-23 options: perl,xft,styles,combining,blink,iso14755,unicode3,encodings=eu+vn+jp+jp-ext+kr+zh+zh-ext, fade,transparent,tint,XIM,frills,selectionscrolling,wheel,slipwheel,cursorBlink, pointerBlank,scrollbars=plain+rxvt+NeXT+xterm 

Я вижу все латинские, катакана, хирагана, хангул, китайский (традиционный, упрощенный), кириллицу, персидский (большинство), грузинские символы и т. Д. Но дингбаты выглядят так, когда я их печатаю:

Dingbats not rendering

Я использую Zsh в Vim-режиме, если это имеет значение.
Глядя на Google, единственный совет, который я могу найти, - убедиться, что моя локаль установлена ​​на UTF-8 и что шрифты имеют необходимые символы. И то, и другое, я считаю, я обеспечил.

Где я мог пойти не так?

0
Обратите внимание, что шрифты должны быть доступны * на клиенте *, а не на сервере. (если вы не используете терминал с сервера с перенаправлением X-сервера, то есть) Paul Stelian 6 лет назад 0
Соединение с помощью `ssh -X` с PuTTY. Я установил шрифты на свой компьютер Arch, затем скопировал их и разместил в правильных местах установок VcXsrv. Может быть, это был неправильный способ сделать это? Warepire 6 лет назад 0
Место, где работает PuTTY, должно иметь шрифты (то есть консоль Windows). И это обычно не так. Вы можете запустить `gnome-terminal` через ssh -X, и это должно правильно отображаться с использованием серверных шрифтов (на самом деле я использую такую ​​конфигурацию!) Paul Stelian 6 лет назад 0
@Paul Stelian Проблема в моих терминалах urxvt, терминал PuTTY рендерится так, как я ожидаю. Начиная с сессии PuTTY, я запускаю терминалы urxvt, и это те, которые не будут правильно отображаться. Извините, если мне не ясно с этим. (Я просто хотел показать, как я пересылал X в моем предыдущем комментарии) Warepire 6 лет назад 0
Я считаю, что urxvt на самом деле не учитывает все шрифты. Знаете ли вы, как изменить используемый шрифт? (он не делает это автоматически, это точно) Кроме того, убедитесь, что выбранный шрифт содержит эти символы (возможно, Noto Mono или подобный шрифт?) Paul Stelian 6 лет назад 0
Я включил мою конфигурацию urxvt в вопрос, так как я не уверен, где находится настоящая проблема. Когда я его настраивал, я следовал некоторым руководствам в Интернете (мой первый раз с urxvt), и он, кажется, отображает правильный шрифт при визуальном сравнении символов с картами глифов для каждого шрифта. Я проверил запасной шрифт, временно удалив первый вариант. Я также выгрузил распечатки теста Dingbat в файл и сравнил двоичные данные с ожидаемыми байтовыми последовательностями для символов Dingbat, и они совпадают. Warepire 6 лет назад 0
И ... ты уверен, что шрифт Hack включает в себя дингбаты? Paul Stelian 6 лет назад 0
Должен, и запасной вариант определенно делает. Warepire 6 лет назад 0
Может быть, у Хака этого нет. Обратите внимание, что он загружает запасной вариант, только если отсутствует * весь шрифт *, а не при наличии некоторых символов. Может быть, изменить порядок? Paul Stelian 6 лет назад 0
Я не так интерпретировал информацию, которую нашел в Google, так что это очень полезно знать. Благодарю. Просто запустил тест Dingbat после того, как я удалил этот шрифт из списка и выполнил `xrdb -load .Xdefaults`. Тот же результат, дингбаты не печатаются. (На этот раз я использовал только Unifont). Warepire 6 лет назад 0
Хм, попробуйте получить несколько шрифтов Noto Mono, потому что известно, что Noto старается избегать коробок (они называют тофу) столько, сколько они могут. Paul Stelian 6 лет назад 0
Хм, GNU Unifont преследует ту же цель. Я сделал снимок Noto Mono (`URxvt * font: xft: Noto \ Mono: size = 10`), но дингбаты все еще отсутствуют. Warepire 6 лет назад 0
Ну, это интересно ... Paul Stelian 6 лет назад 0
Я пробовал символы в моей системе Windows и * некоторые * отображаются только со специализированными шрифтами, в то время как другие не отображаются вообще. Paul Stelian 6 лет назад 0
По состоянию на https://www.w3schools.com/charsets/ref_utf_dingbats.asp вы даже не находитесь в правильном регионе Юникод (если там тоже нет дингбатов) Paul Stelian 6 лет назад 0
Ах, я вижу ... Символы 61440 и далее (u + F000 и далее) являются плоскостью * частного использования, где символы означают разные вещи в разных системах. Paul Stelian 6 лет назад 0

1 ответ на вопрос

0
Paul Stelian

Проблема возникает из-за использования символов, которые находятся в плоскости частного использования Unicode, которая не гарантирует ничего особенного в этом. Системы Windows XP могут явно редактировать там шрифты с помощью eudceditкоманды, на Mac есть логотип Apple в одном из 6400 символов в этой плоскости и, проще говоря, вы используете неправильные дингбаты.

Правильные дингбаты - от 9985 до 10175 десятичных (2701 до 27bf шестнадцатеричный).

Это был действительно глупый сбой в моем тесте, но он не решил мою проблему на 100%, результаты с Noto Mono и Unifont (в таком порядке): [Imgur: results] (http://i.imgur.com) /Kw9QXUV.png) Warepire 6 лет назад 1
Хм, теперь проблема становится интересной ... Paul Stelian 6 лет назад 0
На моей консоли Windows работали только 3 шрифта: NSimSun, MS Gothic, SimSun-ExtB Paul Stelian 6 лет назад 0
Разве не мой X-сервер (VcXsrv) должен обрабатывать шрифты? Так как это консоль urxvt. Warepire 6 лет назад 1
X-сервер действительно является ответственным за рендеринг шрифтов. Тем не менее, наличие общих шрифтов, где некоторые действительно покрывают их (попробуйте Noto Mono еще раз), это хорошо. И также возможно, что шрифты будут загружены приложением на сервер. Paul Stelian 6 лет назад 0
Вы поставили меня на правильный путь там. Я начал копаться глубже в своем X-сервере (VcXsrv), и в коде, и в журнале, и мне удалось вытащить из него эту строку во время запуска: `Предупреждение: языковой стандарт не поддерживается X, возвращаясь к языку 'C'`. Warepire 6 лет назад 2