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

也可以看看: 当我的文本显示为方框时,这意味着什么?

有帮助吗?

解决方案

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

  1. 文本有时显示为问号

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

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

其他提示

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

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

如何做到这一点包括:

  1. 将UTF-8文本视为ANSI(不先转换为有效的代码页)
  2. 将Unicode文本转换为代码页,而不检查代码页中是否包含正确的字符。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top