Квадраты Centos 8 вместо русских символов

Обновлено: 21.11.2024

Здравствуйте.
У меня есть wkhtmltopdf 0.12.3, работающий на Centos 7.
Кажется, он конвертирует HTML-файлы в PDF-файлы, но символы UTF-8 либо отсутствуют (пустые поля), либо отображаются в виде квадратов.

Текст был успешно обновлен, но возникли следующие ошибки:

Комментарий PhilterPaper от 5 сентября 2016 г.

Пожалуйста, предоставьте небольшой HTML-файл, демонстрирующий эту проблему, и полную командную строку. Вы используете необычные шрифты? (например, загруженные с @face) Работает ли он нормально, скажем, только с семействами шрифтов с засечками и без засечек или со шрифтами по умолчанию? Латинские символы без ударения (ASCII) выводятся нормально, а символы с акцентом — нет? Ваш HTML нормально отображается в браузерах? Я видел текст с акцентом, который фактически вводился (редактировался) в формате Latin-1, а не UTF-8, и поэтому не мог быть преобразован.

xokaido прокомментировал 5 сентября 2016 г.

Спасибо еще раз.

Комментарий PhilterPaper от 6 сентября 2016 г.

На этой странице я вижу 4 разных алфавита (письма). Первый, о котором вы говорите, вообще не появляется, я не узнаю. Следующие три — это греческий, кириллический и латинский алфавиты. Хотя они отображаются в моем браузере, я ничуть не удивлюсь, если первый алфавит (что это такое?) встречается достаточно редко, чтобы шрифт(ы) UTF-8, используемые в первой строке, не включал эти символы. Я не думаю, что PDF и браузеры обязательно используют одни и те же файлы шрифтов. Вам нужно будет найти, какие шрифты вы используете здесь (очевидно, шрифты по умолчанию), какой алфавит используется в первой строке, и спросить кого-нибудь, кто знаком с этим, следует ли ожидать появления этих символов. В противном случае вам, возможно, придется встроить информацию о шрифте в PDF-файл (остерегайтесь проблем с авторскими правами!), если вы найдете шрифт, который работает на вашем ПК.

Греческая строка может содержать устаревшие символы, которых нет в большинстве шрифтов PDF. Это отсутствующий глиф или поле, или сообщается о какой-то более серьезной ошибке? Вам может быть полезно прикрепить PDF-файл, чтобы кто-то мог увидеть, что происходит.

xokaido прокомментировал 6 сентября 2016 г.

Первая строка — грузинский язык, а вторая (греческая) — обычный греческий текст. Кириллические буквы вроде работают. Как включить пользовательские шрифты в PDF и как указать wkhtmltopdf искать шрифты в другом каталоге (или в каком каталоге искать по умолчанию).

Большое спасибо за помощь.

xokaido прокомментировал 6 сентября 2016 г.

Это не проблема, извините, мне пришлось установить в системе дополнительные шрифты.
Проблема заключалась в том, что моя система Centos 7 не включала правильные лицевые стороны для этих нелатинских символов.

Проблема закрыта, спасибо за помощь!.

ohadperry прокомментировал 17 июля 2017 г. •

@xokaido, что именно вы установили?
такая же проблема со шрифтами на иврите

  1. Пробовал: Sudo yum install curl cabextract xorg-x11-font-utils fontconfig
  2. Пробовал: Sudo yum install liberation-sans-fonts
    1. sudo yum установить dejavu-lgc-sans-fonts

    вывод локали

    ohadperry прокомментировал 17 июля 2017 г.

    Я также решил эту проблему, просто скопировав Arial.ttf с моего локального Mac в /Library/Fonts

    на мой удаленный сервер в /usr/share/fonts/local (сам создал локальный каталог).

    затем fc-cache -v для обновления и все заработало

    mboullouz прокомментировал 26 марта 2018 г.

    ШемерКузниц прокомментировал 19 июля 2018 г.

    @ohadperry Спасибо! это решило и мою проблему

    Вы не можете выполнить это действие в данный момент.

    Вы вошли в другую вкладку или окно. Перезагрузите, чтобы обновить сеанс. Вы вышли на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.

    Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме сбоя сервера.

    Закрыт 2 года назад.

    При подключении с ПК с Windows 7 через SSH к серверу Ubuntu с помощью PuTTY появляются некоторые ошибки на экране:

    • "Двойное рисование" выбора внутри Midnight Commander (MC).
    • Другие символы, такие как элементы строки, отображаются как неправильные символы (например, "â" вместо "|").

    Я подключился к тому же серверу Ubuntu с помощью терминала и SHH из Mac OS X и не получил этих искажений экрана (т. е. все выглядит и работает правильно). Я уже пытался поиграть с настройками шрифта внутри PuTTY, изменив его с Courier New на Consolas, но безуспешно.

    Поэтому мой вопрос:

    Как настроить PuTTY для правильного отображения специальных символов, а не для двойного рисования/перезаписывания строк экрана?

    С SecureCRT: выберите «Параметры» -> «Параметры сеанса» -> «Терминал» -> «Внешний вид» -> «Кодировка символов» -> выберите: UTF-8. Надеюсь помочь другим, как я!

    15 ответов 15

    Вы почти наверняка установили неправильный набор символов в настройках PuTTY.

    Проверьте набор символов в удаленной системе, выполнив команду:

    Это должно вернуть что-то вроде:

    Поэтому проверьте настройки PuTTY в разделе «Перевод» и убедитесь, что в качестве набора символов установлена ​​UTF-8.

    Возможно, вам также потребуется настроить параметры рисования линий, но это маловероятно.

    Этого недостаточно во всех случаях. Вы также должны экспортировать в свою среду следующую переменную: NCURSES_NO_UTF8_ACS=1 [подробнее]

    @michael-hampton, моя система настроена на использование en_US.UTF-8. Я вижу, что в разных местах говорят по-разному о локали. В некоторых местах упоминается, что я должен использовать en_US, в то время как в других местах упоминается, что я должен использовать de_DE. Я видел до того, как grep и другие основные утилиты использовали локаль для установки набора символов, я думаю. Каковы последствия изменения этого?

    @koppor, вы упомянули о смене локали на en_US, а Майкл упомянул об изменении локали на de_DE. Какой из них правильный?

    Это хорошо работает (на PuTTY), но затем возникает другая (более незначительная) проблема: удаленное изменение заголовка окна больше не работает.

    Через 15 лет я снова разозлился и снова погуглил, нашел это, выбрал

    изменить настройки → окно → перевод → удаленный набор символов → «использовать кодировку шрифта»

    и это все исправило.

    Когда я устанавливаю Использовать кодировку шрифта, то, например, символы armbian-config в порядке, но они неверны в Midnight Commander, и наоборот - когда я устанавливаю UTF-8, символы в armbian-config неверны, но в Midnight Commader они в порядке.

    Кроме того, если UTF-8 настроен неправильно, вы можете запустить его как mc -ac.

    Окно → Перевод → «Включить отрисовку линий VT100 даже в режиме UTF-8».

    Это исправляет отображение mc и wavemon для меня.

    Двумя основными факторами являются Window/Translation UTF-8 в putty и языковые настройки в Linux, как указано здесь и во многих других местах.

    Кроме того, в putty может помочь установить для строки Connection/Data/Terminal-type значение putty и/или в Linux экспортировать NCURSES_NO_UTF8_ACS=1 . Эти двое также упоминаются в нескольких местах.

    Этот последний трюк был необходим мне, чтобы заставить noping (рекомендуется!) показывать все графические символы.

    Экспорт NCURSES_NO_UTF8_ACS=1 у меня работал лучше всего. Мне просто нужно не забыть использовать параметр -E в sudo, когда я запускаю iftop, чтобы сохранить эту настройку среды. sudo -E iftop

    PuTTY → Окно → Перевод → Удаленный набор символов → DEC-MCS

    В моем случае (Ubuntu 14.04) проблема была вызвана отсутствием

    запись в /etc/ssh/sshd_config как /etc/pam.d/sshd Конфигурация pam по умолчанию отвечает за загрузку /etc/default/locale в пользовательскую среду.

    Я искал много решений для этого при использовании Docker-машины (как в локали, так и на машинах, настроенных системным администратором). В моем Putty все было в порядке (у меня была UTF-8), я также использовал другой SSH-клиент, и у меня была точно такая же проблема.

    решал проблему (но не полностью) и искал полное решение.

    Прочитав множество предложений, я наконец нашел то, которое решило мою проблему.

    В терминале при запуске:

    проверьте, какую локаль вы установили. У меня по умолчанию была локаль C.

    Чтобы проверить все установленные локали, запустите locale -a

    У меня, например:

    Решение заключается в экспорте переменной LANG с локалью C.UTF-8 следующим образом:

    Очевидно, что вы можете добавить его в .bashrc, чтобы он автоматически устанавливался в вашем профиле.

    Каковы побочные эффекты изменения переменной LANG? Если у вас уже был C.UTF-8 как LANG, зачем его снова экспортировать?

    Мне пришлось установить на странице ОкноПеревод набор символов:

    Тогда и только тогда символы линии отображались правильно.

    Еще одна причина, так или иначе связанная с pam, которая может повлиять на хосты с аутентификацией powerbroker/pbis/likewise.

    grep /etc/pam.d для случая "lsass":

    если вы видите в выводе что-то вроде:

    тогда это, вероятно, основная причина проблемы. Быстрое исправление состоит в том, чтобы заменить «достаточный» на «необязательный» рядом с модулем pam_lsass, чтобы он выглядел так:

    Символы Unicode не будут правильно отображаться в vim при запуске. Когда я получаю свой .vimrc, символы отображаются нормально. Я использую термит и vim версии 8.0 с патчами 1-1542 на Arch Linux. Когда я помещаю включенный фрагмент в отдельный файл и запускаю vim с этим файлом в качестве файла конфигурации, я получаю ту же ошибку и то же «исправление».

    Vim скомпилирован с включенным multi_byte.

    Текст был успешно обновлен, но возникли следующие ошибки:

    прокомментировал parmort 22 марта 2018 г. •

    Спасибо, Тони. К сожалению, у недавно скомпилированной версии vim (8.0.1626) такая же проблема. Если это кому-то поможет (я не упомянул об этом в начале), я получаю перевернутый вопросительный знак, если открываю вертикальное разделение. Это все в терминальном vim, однако, когда я попробовал это в gvim (8.0.1626), возникла та же проблема.

    Вот мой .vimrc . Опять же, если я использую свой .vimrc, юникод отображается сразу же.

    Еще раз спасибо за советы.

    k-takata прокомментировал 22 марта 2018 г.

    Это может быть не связано с проблемой, однако строка scriptencoding utf-8 должна стоять после установки 'encoding':

    Это будет иметь значение, если значение по умолчанию для "кодировки" не равно utf-8 (например, в Windows).
    См.: :help :scriptencoding

    прокомментировал mgedmin 22 марта 2018 г.

    Опять же, если я использую свой .vimrc, юникод отображается сразу же.

    Это странно. Можете ли вы проверить с помощью :scriptnames, был ли ваш .vimrc получен при запуске?

    Можно ли проверить значения encoding и termencoding с помощью :verbose set enc? Тенк? чтобы узнать, выполнялся ли какой-либо другой скрипт/плагин после того, как ваш .vimrc переопределил их?

    Можете ли вы воспроизвести проблему, если укажете vim игнорировать вашу конфигурацию с помощью команды vim --clean ?
    Можно ли воспроизвести с помощью другого эмулятора терминала?
    Правильно ли языковой стандарт вашей системы установлен на UTF-8 (проверьте, запустив локальный Charmap в оболочке)?

    прокомментировал toonymec 22 марта 2018 г.

    Бинго! Ваша вертикальная полоса — U+2503 BOX DRAWINGS HEAVY VERTICAL, на которую не влияет :help option-backslash , а не U+007C VERTICAL LINE, которая есть. Удалите обратную косую черту и повторите попытку.

    Я нашел это, скопировав и вставив в gvim, а затем ga на вашей вертикальной полосе.

    С уважением,
    Тони.

    прокомментировал parmort 22 марта 2018 г.

    Спасибо, @tonymec и @k-takata. Мне пришлось использовать оба этих совета, чтобы решить проблему. Я думаю, можно с уверенностью сказать, что это решено. Что-то, на что нужно обратить внимание (я сам не уверен, как это сделать), - это «исправить» файл синтаксиса vim-script. Когда у меня был только U+2503, vert: не окрашивался, из-за чего казалось, что это неправильно. С обратной косой чертой это было выделено. Еще раз спасибо!

    Я установил новую оболочку bash на Windows 10. Я использую ее вместе с ZSH. Однако ни один из символов utf8 не работает, они отображаются в виде квадратных блоков. Как включить кодировку символов utf8 в оболочке по умолчанию? Это возможно?

    Если каждый символ отображается как один квадратный блок, то UTF-8 уже работает; это шрифт без поддержки Unicode.

    @grawity Я использовал uubntu mono, а теперь переключился на консоль. Вместо пустой квадратной коробки я получаю квадратную коробку со знаком вопроса внутри. Я также пробовал вариант chcp, но он уже был настроен на кодировку UTF-8, когда я проверял свойства.

    Я хотел бы отметить, что эта проблема до сих пор не решена и что я все еще не могу правильно отображать символы Unicode utf8 с помощью ZSH

    4 ответа 4

    Чтобы добавить к ответу Doctorj, есть пара шрифтов, установленных по умолчанию, которые вы можете использовать (в оболочке bash Windows 10).

    Протестированные языки: болгарский, украинский, китайский упрощенный, китайский традиционный, датский, французский, немецкий, итальянский, японский, казахский, корейский, македонский, монгольский, норвежский, польский, португальский, русский, сербский, испанский, шведский.

    Следующие шрифты по умолчанию отображают все наблюдаемые символы:

    • Готичный MS
    • NSimSun
      • Не отображается весь казахский язык.

      И MS Gothic, и NSimSun

      • Удаляет нелатинские языки, не относящиеся к CJK (китайский, японский, корейский) (македонский, казахский, болгарский).
      • Имеет нечетное вертикальное смещение латинских символов с диакритическими знаками (á,é).
      • Не отображается по крайней мере один македонский символ.

      SumSun-ExtB (растровый шрифт):

      • Появляется предупреждающее сообщение о том, что растровые шрифты могут плохо отображаться.
      • Большинство символов отображаются темными (это может быть связано с низкой яркостью экрана).
      • Символы, отличные от ASCII, ярче по сравнению с символами ASCII (возможное решение, используйте полужирный шрифт).
      • Символы всех языков расположены близко друг к другу (проще увидеть пробелы между словами).
      • Кажется более надежным для нелатинских языков, отличных от CJK.

      С любым из этих шрифтов, как командной строки, так и PowerShell, при нажатии на символы, отличные от ASCII, происходят странные вещи, хотя при выделении текста все возвращается к норме.

      Чтобы установить шрифт: обратите внимание, что вам нужно изменить шрифт для используемой оболочки Windows, такой как командная строка или PowerShell, а не для Linux через bash. По этой ссылке описано, какие шрифты можно использовать в командной строке (моноширинные шрифты, а также как установить и выбрать шрифт для командной строки): Добавление шрифтов в командную строку

      • Вызовите редактор реестра (запустите "regedit")
      • Найдите папку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
      • Щелкните правой кнопкой мыши (или "Правка") -> "Создать" -> "Строковое значение".
      • Назовите шрифт, в котором на один 0 больше, чем в последнем (например, "000").
      • Щелкните запись правой кнопкой мыши и выберите "Изменить".
      • Введите имя шрифта или файла OTF (без .otf).

      Информацию об установке шрифтов через командную строку в Windows см. в этом вопросе и ответах.

      • Я попытался установить "Source Code Pro", но он не появился у меня в шрифтах.
      • Я установил DejaVu Sans Mono, и он работает для большинства языков, но совсем не работает для CJK.
      • Я установил моноширинный шрифт Google Noto, и он работал, но не для CJK. Кроме того, они прямо говорят, что у них нет моноширинной поддержки для CJK.
      • Я установил Inconsolata от Google, и это не стоило попытки.
      • Я установил GNU FreeFont (FreeMono), и это сработало, но не для CJK.
      • Я сдался и вернулся к SimSun-ExtB.

      (Примечание: у меня еще недостаточно репутации, чтобы публиковать ссылки).

      Щелкните правой кнопкой мыши строку заголовка в верхней части окна bash и выберите свойства записи. В открывшемся окне есть вкладка, где можно изменить шрифт. Я изменил шрифт на "Source Code Pro" и размер 14.

      Выглядит хорошо, все символы utf-8 работают.

      Это правильный ответ. Вы можете выбрать любой понравившийся вам шрифт, поддерживающий UTF8. Я установил Menlo, а затем забыл изменить его в параметрах bash, честно говоря, даже не подумал об этом.

      Обратите внимание, что я пробовал все параметры по умолчанию в Windows (включая Source Code Pro), и символ галочки (✔) работал у меня только со шрифтом "DejaVu Sans Mono", предложенным @user3599934!

      Вы можете попробовать DejaVu Sans Mono - мне это подходит.

      Хотя это может быть решением проблемы OP, это скорее подсказка, чем качественный ответ. Его можно улучшить, дав инструкции: 1) как изменить шрифт для терминала Windows 10 Bash; 2) как установить указанный шрифт (если только он не во всех Windows 10 по умолчанию — я на Linux, не знаю).

      Это скорее комментарий, чем ответ, но поскольку SE не позволяет мне комментировать.

      Вы предоставили недостаточно информации. Unicode предоставляет более миллиона возможных символов, из которых определено более 100 000. (Остальные предназначены для случаев, когда мы контактируем с инопланетянами, или, что более вероятно, для систем письма землян, которые еще не были закодированы.) Они разделены примерно на 150 шрифтов: латиница, кириллица, арабский, китайский. Ни один шрифт не будет содержать глифы (изображения символов) для всех этих символов. (Есть один или два, которые содержат коробку с кодовой точкой внутри, но это не то, что вам нужно.)

      Как два года назад Grawity сказал, что если вы получаете поле, в котором вы ожидаете один символ, то ваше приложение уже отображает Unicode (предположительно кодировку Unicode UTF-8). Чего вам не хватает, так это шрифта, который предоставляет глифы для любых скриптов, которые вы хотите отобразить. Если вы показываете русский язык, вам нужен шрифт с кириллическими символами; если вы хотите отображать китайский язык, вам нужен шрифт с этими символами. (Большинство таких шрифтов также отображают латинские символы, которые мы используем для английского языка, но не обязательно красиво.)

      Итак, мой вопрос к вам: какой сценарий вы пытаетесь отобразить? Пока мы этого не узнаем, все ответы будут предположениями.

      Кстати, некоторые сценарии довольно сложны, и только некоторые программы будут отображать их правильно, даже если у вас есть правильный шрифт. Среди них бирманский, некоторые индийские шрифты (например, деванагари) и арабский (который пишется справа налево и имеет символы, которые должны отображаться по-разному в зависимости от соседних символов).

      Читайте также: