当我的文字显示为问号时,这是什么意思?

时间:2008-10-20 00:49:05

标签: unicode text fonts

我正在尝试使用(例如)Windows GDI在我的程序中显示一些文本,并且某些unicode字符显示为问号?怎么了?

另请参阅:What does it mean when my text is displayed as boxes?

3 个答案:

答案 0 :(得分:7)

在Windows中,尝试显示Unicode字符时会出现两个常见的显示问题:

  1. 文字有时会显示为问号

    • 当Unicode数据通常通过系统代码页转换为8位字符集编码(或技术上的多字节字符)时会发生这种情况(但可以在转换调用中指定其他代码页)。如果目标8位字符集不包含所需字符,则目标字符集中无法表示的任何字符都将转换为问号。
  2. 文字有时会显示为方框

    • 对于特定字符没有glpyh的字体,这是一个问题。当文档中的Unicode字符与字体支持的字符不匹配时,框会显示。具体来说,这些框表示所选字体不支持的字符。

答案 1 :(得分:1)

这意味着你的Unicode文本正在某处转换为ANSI文本。由于Latin-1之外的Unicode字符无法转换为ANSI,因此它们将转换为问号。确保您的程序是使用Unicode支持编译的(即预处理器符号UNICODE和_UNICODE由您的项目#defined),因此您始终调用各种Windows函数的正确Unicode版本。

答案 2 :(得分:0)

基本上你已经破坏了文字。您正在使用一种编码中的Unicode文本,然后将其转换为另一种编码,而不检查目标编码是否包含源文本中的所有字符。这样做之后你就会有一堆胡言乱语。

如何做到这一点包括:

  1. 将UTF-8文本视为ANSI(不先转换为有效的代码页)
  2. 将Unicode文本转换为代码页,而不检查代码页中是否包含正确的字符。
相关问题