Что это значит, когда мой текст отображается как вопросительные знаки? - PullRequest
8 голосов
/ 20 октября 2008

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

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

Ответы [ 3 ]

7 голосов
/ 20 октября 2008

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

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

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

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

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

0 голосов
/ 20 октября 2008

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

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

  1. Обработка текста UTF-8 как ANSI (без предварительного преобразования в допустимую кодовую страницу)
  2. Преобразование текста Unicode в кодовую страницу без проверки, содержит ли кодовая страница правильные символы.
...