none
同一个汉字,ScriptStringOut可以输出,ScriptTextOut不能正确输出 RRS feed

  • 问题

  • 我现在有一个汉字 (王莹)  0xe052

    在使用 ScriptStringOut 时可以正确的输出

    但在使用ScriptTextOut时,输出了一个 □ 。

    有谁可以知道原因吗?

    谢谢大家!

    2019年5月7日 5:31

答案

  • 你好,

    感谢您在MSDN论坛发帖提问。

    >>同一个汉字,ScriptStringOut可以输出,ScriptTextOut不能正确输出 

    所有 Windows 10 版本都包括提供广泛的语言支持的字体,并且 WIndows 平台包括字体回退机制,旨在确保任何语言的文本都能始终显示清晰的字形,而不是显示为框。 但是,某些应用可能直接依赖于特定的字体以显示特定的 Unicode 字符,并没有利用 Windows 提供的字体回退机制。 在某些情况下,这些应用直接依赖于默认不在 Windows 10 系统上显示的字体。 由于应用尝试使用的字体没有在系统上显示,因此使用一些其他字体来显示文本,该字体可能不支持要显示的全部字符。 当使用不支持某个字符的字体显示该字符时,使用的是该字体中的默认“未定义”字形。 大多数字体中的“未定义”字形的外观是三角形框或其变体。

    建议使用不提供字体回退的级别较低的图形 API 进行复杂布局的浏览器或其他应用(例如,使用 ETO_GLYPH_INDEX、ScriptTextOut 的 DrawGlyphRun、ExtTextOut)。

    Best Regards,

    Jeanine Zhang
    • 已标记为答案 樊亚鹏 2019年5月8日 5:37
    2019年5月7日 7:35
    版主
  • 字体问题应该是A字显示为B字,或者显示为其他不正确的图形,字体中缺少未定义专用区的字,不能算字体问题。
    • 已标记为答案 樊亚鹏 2019年5月8日 5:37
    2019年5月8日 1:51

全部回复

  • 请问0xe052是什么编码?
    2019年5月7日 5:41
  • unicode
    2019年5月7日 6:15
  • 编码前的那个,方框是个字,直接复制粘贴到记事本里,就可以看见,就是 0xe052
    2019年5月7日 6:16
  • unicode编码E0至F8是专用区,相当于自定义区,其中的编码没有固定的意义。
    2019年5月7日 6:30
  • 这个我知道,现在,ScriptStringOut 可以正常输出,也是这个编码,设置也是一样的,用的DEFAULT_CHARSET的设置,一个可以正常显示,一个就不行,ScriptTextOut 按文档说,就是调用了ExtTextOut,但现在调用ExtTextOut可以正常输出,但是调用ScriptTextOut,就是不行
    2019年5月7日 7:08
  • 编码前的那个,方框是个字,直接复制粘贴到记事本里,就可以看见,就是 0xe052
    使用ScriptTextOut也能正常输出,只不过是个方框,复制黏贴到记事本就能看见unicode专用区对应字体图形了。
    2019年5月7日 7:23
  • 你好,

    感谢您在MSDN论坛发帖提问。

    >>同一个汉字,ScriptStringOut可以输出,ScriptTextOut不能正确输出 

    所有 Windows 10 版本都包括提供广泛的语言支持的字体,并且 WIndows 平台包括字体回退机制,旨在确保任何语言的文本都能始终显示清晰的字形,而不是显示为框。 但是,某些应用可能直接依赖于特定的字体以显示特定的 Unicode 字符,并没有利用 Windows 提供的字体回退机制。 在某些情况下,这些应用直接依赖于默认不在 Windows 10 系统上显示的字体。 由于应用尝试使用的字体没有在系统上显示,因此使用一些其他字体来显示文本,该字体可能不支持要显示的全部字符。 当使用不支持某个字符的字体显示该字符时,使用的是该字体中的默认“未定义”字形。 大多数字体中的“未定义”字形的外观是三角形框或其变体。

    建议使用不提供字体回退的级别较低的图形 API 进行复杂布局的浏览器或其他应用(例如,使用 ETO_GLYPH_INDEX、ScriptTextOut 的 DrawGlyphRun、ExtTextOut)。

    Best Regards,

    Jeanine Zhang
    • 已标记为答案 樊亚鹏 2019年5月8日 5:37
    2019年5月7日 7:35
    版主
  • 汉字“㼆”的unicode编码为“0x3F06", 该字对应的简化汉字 (王莹)在unicode编码中目前尚未定义, 因此将简化的“㼆”字定义在专用区内,对应的字体文件应该也是专用的, 在你的系统中ScriptStringOut即使能正常显示,但在其他人的系统中ScriptStringOut、ScriptTextOut同样不能正常显示。
    2019年5月7日 8:02
  • 字体问题应该是A字显示为B字,或者显示为其他不正确的图形,字体中缺少未定义专用区的字,不能算字体问题。
    • 已标记为答案 樊亚鹏 2019年5月8日 5:37
    2019年5月8日 1:51