Что это значит, когда мой текст отображается в виде вопросительных знаков?
Вопрос
Я пытаюсь отобразить некоторый текст в своей программе, используя (скажем) Windows GDI, и некоторые символы Unicode отображаются в виде вопросительных знаков?Что случилось?
Смотрите также: Что это значит, когда мой текст отображается в виде полей?
Решение
В Windows есть 2 распространенные проблемы с отображением, которые возникают при попытке отобразить символы Юникода:
текст иногда отображается в виде вопросительных знаков
- Это происходит, когда данные в Юникоде преобразуются в 8-битную кодировку набора символов (или технически многобайтовые символы), обычно через системную кодовую страницу (но в вызовах преобразования могут быть указаны и другие кодовые страницы).Если целевой 8-разрядный набор символов не включает необходимые символы, любые символы, не представленные в целевом наборе символов, преобразуются в вопросительные знаки.
текст иногда отображается в виде полей
- Это проблема со шрифтом, не имеющим glpyh для определенного символа.Поля отображаются при несоответствии символов Юникода в документе символам, поддерживаемым шрифтом.В частности, поля представляют символы, не поддерживаемые выбранным шрифтом.
Другие советы
Это означает, что ваш текст Unicode где-то преобразуется в текст ANSI. Поскольку символы Unicode за пределами Latin-1 не могут быть преобразованы в ANSI, они преобразуются в знаки вопроса. Убедитесь, что ваша программа скомпилирована с поддержкой Unicode (т.е. символы препроцессора UNICODE и _UNICODE # определены вашим проектом), чтобы вы всегда вызывали правильные версии Unicode различных функций Windows.
В основном вы испортили текст. Вы берете текст Unicode в одной кодировке, а затем конвертируете его в другую кодировку, не проверяя, что целевая кодировка включает все символы в исходном тексте. Сделав это, вы получите кучу бреда.
Способы сделать это включают в себя:
<Ол>