Вьетнамское имя в PDF безупречно выглядит в Chrome, но в другом просмотрщике теряет несколько букв. Для команды это не просто косметика: документ может неверно индексироваться, плохо копироваться или отображаться у получателя совсем не так, как у автора.
Словами «проблема с кодировкой» часто называют сразу несколько разных сбоев. Unicode разделяет их на отсутствие поддержки символа шрифтом, неправильную обработку письменности и искажённые знаки. Для поиска причины эти случаи нужно проверять по отдельности, а не менять шрифт наугад (руководство Unicode по проблемам отображения).
Что именно ломается в многоязычном документе¶
Многоязычный текст проходит через несколько уровней. Кодировка хранит символы в виде последовательности байтов, программа разбирает эти данные, механизм формирования текста определяет порядок и форму знаков, а шрифт рисует на экране соответствующие глифы. Глиф - это видимая форма символа. Ошибка на любом уровне может выглядеть для читателя как «неправильный шрифт», хотя причина будет другой.
Кодовая точка Unicode - числовое представление символа в стандарте. Глиф не равен кодовой точке: одна и та же буква может выглядеть по-разному в разных шрифтах, а одна буква в письме с контекстными формами может отображаться разными глифами в зависимости от позиции и соседей. Поэтому правильный текст в данных не гарантирует правильное изображение на странице.
Unicode выделяет три широкие группы проблем:
- Нет нужного знака в шрифте. Вместо буквы программа показывает пустой квадрат, знак вопроса в рамке, код символа или пустое место.
- Письменность обработана неправильно. Символы узнаваемы, но арабские буквы не соединяются, индийские сочетания или диакритические знаки располагаются неверно.
- Неправильные или повреждённые символы. На месте исходного текста появляются другие буквы, знаки или последовательности, потому что данные интерпретировали не так, как они были закодированы.
Unicode Consortium описывает типичный признак отсутствующей поддержки шрифта так: “the typical symptom is appearance of special character-not-supported or ‘tofu’ glyphs.”
Проще говоря, «тофу» - это условное название квадратиков-заглушек. Если видны такие заглушки, сначала проверяйте наличие глифов и выбор шрифта, а не объявляйте весь текст испорченным.
Один файл может сочетать несколько причин. Например, основной текст отображается нормально, редкие знаки заменяются квадратами, а после экспорта в PDF копирование выдаёт неверные буквы. Визуальная проблема, проблема обработки письменности и проблема текстового слоя могут сосуществовать.
Для практической диагностики полезно задавать не один вопрос «почему сломалась кодировка?», а три:
- Правильные ли символы хранятся в документе?
- Может ли выбранный шрифт нарисовать каждый из них?
- Правильно ли программа формирует письменность и связывает видимые знаки с текстом?
Если документ проходит эти проверки в одном приложении, это ещё не гарантирует, что он будет так же работать в другой операционной системе или просмотрщике. Конкретный шрифт, версия приложения, системный механизм подстановки и способ экспорта влияют на результат.
Как отличить ошибку кодировки от проблемы шрифта¶
Начните с симптома и проверьте не только внешний вид. Самый быстрый ориентир - сравнить экранное отображение с текстом, который можно выделить и скопировать. Если в текстовом редакторе знаки правильные, но в документе часть символов выглядит как квадраты, вероятнее проблема покрытия шрифта или его доступности приложению. Если при копировании появляются неверные символы, подозрение смещается к данным, преобразованию или сопоставлению текста.
| Признак | Что проверить в первую очередь | Что он не доказывает |
|---|---|---|
| Квадрат вместо редкой буквы | Поддерживает ли шрифт этот знак и установлен ли он на устройстве | Что исходный текст повреждён |
| Одни и те же знаки отображаются другими буквами | Кодировку исходного файла и преобразования между форматами | Что виноват только выбранный шрифт |
| Арабские буквы видны отдельно или идут в неверном порядке | Формирование письменности, порядок текста и поддержку двунаправленного направления | Что символы отсутствуют в Unicode |
| Страница PDF выглядит правильно, но поиск или копирование дают ошибку | Текстовый слой и связь визуальных знаков с текстовыми символами | Что PDF обязательно повреждён визуально |
| Проблема возникает только в одной программе | Поведение приложения, операционной системы, просмотрщика и конкретного шрифта | Что исправлять нужно только файл |
UTF-8, UTF-16 и UTF-32 способны представить все символы Unicode, но используют разные единицы и последовательности байтов. UTF-8 применяет от одного до четырёх байтов на символ, UTF-16 - одну или две 16-битные кодовые единицы, а UTF-32 - одну 32-битную единицу (FAQ Unicode о UTF и BOM). Если программа читает последовательность байтов не в той кодировке, текст может превратиться в набор неверных знаков, хотя изначально данные были корректными.
Преобразование между UTF-форматами может быть без потерь, если программа правильно интерпретирует исходные данные и выполняет конвертацию. Но ошибочная настройка импорта, несовместимый старый формат или повреждение байтов меняют результат. Некорректную последовательность UTF-8 соответствующая стандарту программа не должна принимать за обычный текст: программа может сообщить об ошибке, отфильтровать байты или использовать знак замены U+FFFD (FAQ Unicode о UTF и BOM).
Кодировка и поддержка шрифта отвечают на разные вопросы. Кодировка определяет, какие символы обозначают сохранённые данные. Шрифт определяет, есть ли подходящий рисунок для символа. Установка нового шрифта не восстановит байты, которые уже были прочитаны или сохранены неправильно. И наоборот: правильная последовательность символов не заставит шрифт нарисовать знак, которого в нём нет.
Проверьте один и тот же фрагмент в исходном приложении и другой программе. Скопируйте его в обычный редактор и сравните символы. Для файлов с импортированным текстом проверьте, какая кодировка выбрана при чтении исходного файла, а затем посмотрите, меняется ли текст после сохранения и повторного открытия. Не перезаписывайте единственный оригинал: ошибочная конвертация может закрепить повреждение.
Если в тексте скрыты управляющие знаки, их отсутствие на экране не обязательно означает сбой. Невидимые символы, например управляющие знаки направления текста, соединители, селекторы вариаций и пробел нулевой ширины, обычно не имеют видимого изображения, когда программа не поддерживает их как отображаемые знаки (FAQ Unicode о неподдерживаемых символах). Такие символы могут влиять на порядок и поведение текста, оставаясь незаметными.
Почему арабский, индийские письменности и CJK требуют отдельной проверки¶
Латиница с несколькими акцентами проверяет покрытие шрифта, но сложные письменности требуют ещё и правильного формирования текста. Шрифту может быть доступна каждая буква, однако программа всё равно должна выбрать нужную форму, соединить знаки и расположить отметки в правильном порядке.
В арабском письме форма буквы зависит от её позиции и соседних букв. Если программа не выполняет нужную обработку, знаки могут оставаться раздельными, хотя каждый из них по отдельности присутствует. Unicode также предупреждает о другом источнике похожего сбоя: использование старых символов арабских презентационных форм в обычном тексте не заменяет корректную последовательность символов и контекстную обработку (руководство Unicode).
Индийские письменности могут включать сочетания согласных и диакритические знаки, для которых важны форма и позиционирование. Ошибочно расположенная отметка или не сформированное сочетание не всегда означает, что исходные символы неверны. Причиной могут быть ограничения шрифта, ошибка в нём или отсутствие нужной обработки в программе (руководство Unicode).
Для письма справа налево проверьте не только форму букв, но и порядок фрагментов. Абзац может содержать арабский текст, числа, латинское название и знаки пунктуации. Смешанное направление создаёт случаи, где визуальный порядок не совпадает с порядком символов при копировании. Подробный пример такой отдельной группы сбоев разобран в материале про ошибки верстки арабского перевода.
Для китайского, японского и корейского текста проверяйте, покрывает ли шрифт нужные знаки, а программа - корректно ли выбирает резервный шрифт. Одного универсального переключателя «Unicode» недостаточно: поддержка зависит от доступных шрифтов и правил их подстановки. Если основной шрифт не содержит конкретный знак, система может выбрать другой. Такая подстановка иногда сохраняет читаемость, но меняет визуальный стиль или интервалы.
Unicode Consortium указывает, что неправильное формирование текста может оставлять узнаваемые символы, но давать неверные формы или размещение знаков.
Это полезный диагностический сигнал: когда буквы видны, но соединены или расположены неправильно, проверьте обработку письменности и конкретный шрифт. Простая смена кодировки здесь может не помочь.
Один показательный случай связан с PDF на вьетнамском языке. Автор сообщения об ошибке в PDF.js описал документ, который отображался в Chrome, но терял часть символов в PDF.js (обсуждение ошибки PDF.js). При проверке обнаружили пустые глифы для двух символов в затронутом шрифте; удаление пустого компонента исправило отображение в проверенной конфигурации. Обсуждение также показало, что результат зависел от сочетания программы, браузера, операционной системы и шрифта.
Этот случай не доказывает, что любой похожий сбой вызван пустыми глифами. Он показывает, почему нельзя делать вывод по одному просмотру: если тот же файл ведёт себя по-разному в разных программах, проверяйте несколько просмотрщиков и учитывайте, что часть проблемы может находиться в конкретном шрифте или механизме отображения.
Что проверять в Word, PDF и других программах¶
Формат документа влияет на то, где искать причину. В редактируемом файле вроде Word могут быть сохранены параметры шрифта, но получателю не обязательно доступен сам шрифт. В PDF шрифт может быть встроен, а текстовый слой при этом может неправильно передавать символы при поиске и копировании. Поэтому проверка «выглядит нормально у меня» отвечает только на вопрос о конкретном отображении.
Word: подстановка не всегда меняет настройки файла¶
Если получателю недоступен выбранный шрифт, приложение может показать документ с подставленным шрифтом. В Word для веб-версии и PowerPoint для веб-версии современный выбор шрифтов может отмечать недоступные шрифты. Замена при просмотре не означает, что исходный шрифт автоматически изменился в самом тексте, но подмена может поменять дизайн и расположение содержимого (справка Microsoft о выборе шрифтов).
Чтобы сохранить вид документа на другом устройстве, Microsoft предлагает встраивать шрифты в документ Office. Встроенный шрифт может помочь сохранить расположение и стиль, а также не допустить появления прямоугольников вместо специальных символов (справка Microsoft о встраивании шрифтов). При этом файл становится больше, а разрешения на встраивание задаёт создатель шрифта.
Встраивание только использованных знаков уменьшает размер файла, но ограничивает дальнейшее редактирование теми знаками, которые уже присутствовали в документе. Если получатель будет добавлять текст тем же шрифтом, Microsoft предлагает рассмотреть встраивание всех символов. Доступность этой функции зависит от шрифта и разрешений его лицензии; некоторые шрифты нельзя встраивать вовсе (справка Microsoft).
Облачные шрифты Office доступны подписчикам с подключением к интернету, но их наличие не гарантирует доступность любого нестандартного шрифта у получателя. Для документа с фирменной гарнитурой или работы без подключения к сети встраивание может оставаться отдельным вариантом (справка Microsoft).
LibreOffice: проверьте таблицу подстановки¶
LibreOffice позволяет настроить таблицу замены шрифтов. Недоступный шрифт можно заменить другим на экране или при просмотре и печати. Такая подстановка не меняет настройку шрифта, сохранённую в документе (справка LibreOffice о шрифтах).
В LibreOffice также предусмотрено встраивание шрифтов, но эта возможность зависит от лицензии и увеличивает размер файла. Для многоязычного документа важно проверить категории, которые приложение показывает отдельно: Latin, Asian и Complex. Настройка для латинского текста сама по себе не подтверждает, что встроены шрифты для других используемых письменностей (справка LibreOffice о встраивании шрифтов).
Таблица подстановки полезна для просмотра и печати, но может скрыть проблему, если тестируют только один компьютер. Получатель увидит результат по собственным настройкам. Поэтому проверяйте документ с отключённой или изменённой подстановкой, если задача - понять, какой шрифт фактически нужен.
PDF: внешний вид и извлечение текста проверяются отдельно¶
PDF может выглядеть правильно, но плохо работать при копировании, поиске или извлечении текста. Это не обязательно ошибка отрисовки шрифта. Проверяйте текстовый слой и связь между видимыми знаками и символами, которые получает программа.
В обсуждении PDF.js автор сообщил, что PDF с вьетнамским шрифтом работал в Chrome, но часть знаков пропадала в PDF.js (сообщение об ошибке PDF.js). Расследование связало результат не только с программой просмотра, но и с пустыми глифами в шрифте. Поэтому правильный просмотр в одном приложении не подтверждает, что документ одинаково обработают другие инструменты.
Встраивание шрифта в PDF может решить задачу доступности рисунков знаков, если на устройстве получателя нужного шрифта нет. Но встраивание не гарантирует, что копирование и поиск будут корректными. Отображение страницы и сопоставление видимой формы с текстовым символом - разные задачи; проверяйте обе.
Проверка перед отправкой: последовательность действий¶
Проверка многоязычного документа должна отделять исходный текст от того, как конкретная программа его рисует. Сохраните копию файла и проходите пункты последовательно: так проще понять, на каком этапе возникает сбой.
- Зафиксируйте точный симптом. Запишите, какие знаки заменились, пропали или поменяли форму. Отметьте, проблема затрагивает весь документ или только отдельный язык, шрифт, абзац либо приложение.
- Сравните вид и скопированный текст. Выделите проблемный фрагмент и вставьте его в простой редактор. Правильное копирование при неправильном отображении указывает на возможную проблему шрифта или отрисовки. Ошибочный текст при копировании требует проверки текстового слоя, исходных данных или преобразования.
- Откройте документ в другой программе. Сравните приложение, где файл создавали, с другим редактором или просмотрщиком. Если результат меняется, зафиксируйте название приложения, операционную систему и шрифт: сочетание этих условий может влиять на отображение.
- Проверьте, что шрифт доступен и покрывает нужные символы. Убедитесь, что выбранный шрифт есть на устройстве, а его набор знаков включает нужное письмо. Если можно выбрать шрифт явно, сравните отображение с другим шрифтом, который поддерживает этот текст.
- Проверьте исходную кодировку, если файл импортировали или конвертировали. Уточните, как программа читала исходные байты, и сравните текст до и после преобразования. Не сохраняйте поверх оригинала, пока не выясните, на каком этапе появились неверные символы.
- Проверьте обработку письменности. Для арабского текста оцените соединение букв и порядок смешанных фрагментов. Для индийских письменностей проверьте сочетания и диакритические знаки. Для текста справа налево протестируйте выделение и копирование, а не только чтение на экране.
- Проверьте встраивание и настройки подстановки. Для DOCX выясните, можно ли встроить шрифт и разрешает ли это лицензия. Для PDF отдельно проверьте отображение страницы и поиск или копирование текста.
- Передайте контрольный файл на независимую проверку. Откройте его в другой программе или попросите получателя подтвердить отображение именно на своей стороне. Не заменяйте проверку одним экспортом в PDF: экспорт тоже может изменить результат.
В журнале проверки полезно фиксировать не только итог, но и условия: имя файла, программу, систему, выбранный шрифт, язык фрагмента и действие, после которого возникла ошибка. Такая запись помогает отличить повторяемую проблему исходного файла от случая, который проявляется только в конкретной программе.
Если сбой касается лишь одного знака, приложите к сообщению о проблеме короткий пример с этим знаком и соседним текстом. Для соединяемых письменностей изолированная буква может не показать сбой, поэтому включайте достаточно контекста, чтобы проверить форму, порядок и соседние символы.
Частые вопросы¶
Как понять, проблема в шрифте или в кодировке?¶
Квадраты, пустые места и заглушки чаще указывают на то, что шрифт или приложение не может показать нужный знак. Неверные буквы при копировании или после импорта требуют проверки исходных символов, кодировки и преобразований; ни один симптом сам по себе не доказывает конкретную причину.
Почему PDF выглядит нормально, но текст копируется абракадаброй?¶
PDF может рисовать страницу правильно, но передавать программе неверное сопоставление между видимыми знаками и извлекаемым текстом. Проверяйте отдельно изображение страницы, поиск и копирование; встраивание шрифта не гарантирует исправления текстового слоя.
Как не допустить подмены шрифта в документе Word?¶
Проверьте файл в приложении и на устройстве, где исходный шрифт не установлен. Если разрешения шрифта позволяют, встроите его в документ; для файла, который будут редактировать, учитывайте разницу между встраиванием использованных знаков и всех символов (справка Microsoft).
Почему арабский текст или индийские письменности отображаются неправильно?¶
Такие ошибки могут быть связаны с формированием контекстных форм, соединением знаков или размещением диакритики, даже если отдельные символы присутствуют. Проверьте шрифт и поддержку обработки письменности в программе; простая смена кодировки не исправляет автоматически эти причины (руководство Unicode).
Может ли встраивание шрифта исправить отображение и извлечение текста из PDF?¶
Встраивание помогает, когда программе просмотра не хватает шрифта для отображения знаков. Извлечение, копирование и поиск зависят также от текстового слоя и связи знаков с символами, поэтому проверяйте эти функции отдельно.
Источники¶
- Unicode Consortium: Display Problems?
- Unicode Consortium: FAQ - UTF-8, UTF-16, UTF-32 & BOM
- Unicode Consortium: FAQ - Display of Unsupported Characters
- Microsoft Support: Benefits of embedding custom fonts
- Microsoft Support: Use the modern font picker in Office
- LibreOffice Help: Embedding Fonts
- Mozilla PDF.js: Some characters are missing when using unicode fonts