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

StackOverflow https://stackoverflow.com/questions/217237

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь отобразить некоторый текст в своей программе, используя (скажем) Windows GDI, и некоторые символы Unicode отображаются в виде вопросительных знаков?Что случилось?

Смотрите также: Что это значит, когда мой текст отображается в виде полей?

Это было полезно?

Решение

В Windows есть 2 распространенные проблемы с отображением, которые возникают при попытке отобразить символы Юникода:

  1. текст иногда отображается в виде вопросительных знаков

    • Это происходит, когда данные в Юникоде преобразуются в 8-битную кодировку набора символов (или технически многобайтовые символы), обычно через системную кодовую страницу (но в вызовах преобразования могут быть указаны и другие кодовые страницы).Если целевой 8-разрядный набор символов не включает необходимые символы, любые символы, не представленные в целевом наборе символов, преобразуются в вопросительные знаки.
  2. текст иногда отображается в виде полей

    • Это проблема со шрифтом, не имеющим glpyh для определенного символа.Поля отображаются при несоответствии символов Юникода в документе символам, поддерживаемым шрифтом.В частности, поля представляют символы, не поддерживаемые выбранным шрифтом.

Другие советы

Это означает, что ваш текст Unicode где-то преобразуется в текст ANSI. Поскольку символы Unicode за пределами Latin-1 не могут быть преобразованы в ANSI, они преобразуются в знаки вопроса. Убедитесь, что ваша программа скомпилирована с поддержкой Unicode (т.е. символы препроцессора UNICODE и _UNICODE # определены вашим проектом), чтобы вы всегда вызывали правильные версии Unicode различных функций Windows.

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

Способы сделать это включают в себя:

<Ол>
  • Обработка текста в формате UTF-8 как ANSI (без предварительного преобразования в допустимую кодовую страницу)
  • Преобразование текста Unicode в кодовую страницу без проверки правильности символов на кодовой странице.
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top