【问题标题】:Why Doesn't my Application Display Unicode?为什么我的应用程序不显示 Unicode?
【发布时间】:2010-12-28 19:48:41
【问题描述】:

我从头开始创建了一个 MFC 应用程序,从一开始就小心使用 CStringW、LPCWSTR 等 Unicode 感知结构来存储和处理数据。项目中也定义了 Unicode。

由于我只有一个人会说一种语言,因此我尝试了以下测试以确保应用程序正确处理和存储了 Unicode 字符串。

在其中一个编辑框中,我输入了 ALT + 2061 和 ALT + 2066 以显示我的键盘上不可用的符号link text 编辑框中唯一显示的是一个正方形。在记事本中尝试了同样的想法,符号正确显示。这只是字体问题吗?如果是这样,我应该使用什么字体?

更新:

我从 unibook 中复制了几个符号并将它们粘贴到编辑框中。除了少数几个符号外,它们已正确处理和保存,因此我对此感到满意。

圣诞快乐。

【问题讨论】:

  • 这看起来很奇怪,因为我一直认为记事本是编辑框上的一个非常薄的可执行包装器。
  • 转到 Spy++ 并检查编辑框的属性。 Window Proc 是否显示 (Unicode)?

标签: visual-studio-2008 unicode mfc


【解决方案1】:

确保您描述的 Alt 键输入法可以在其他程序中使用。它在我的 WinXP 系统上似乎不起作用。

您可能只想从 unicode.org 下载 Unibook 并从中复制字符以确保安全。

【讨论】:

    【解决方案2】:

    这不是直接的字体问题,而是您的 ALT+数字方法的问题。

    使用 alt 键和数字键盘可以输入任何 ASCII 码,即使是键盘上没有键的那些。 不可能以这种方式输入 unicode 字符 - 每次输入 4 位代码时,它都会被转换为 8 位 ASCII 代码:

    2061 -> 100000001101 -> 00001101 -> ASCII 字符 13,一个音符

    它显示为正方形的原因是因为字符 13 是控制字符,所以大多数现代字体没有视觉表示。

    如果您想使用数字键盘输入 unicode 字符,那么您需要使用 Microsoft 添加的扩展模式 - 按住 alt,然后按 并按住数字键盘。现在输入您想要的 unicode 字符的编号,然后松开 alt 和 + 键。

    【讨论】:

    • 我在这里得到了 ALT + 方法fileformat.info/tip/microsoft/enter_unicode.htm 假设它是正确的。
    • 重读你的答案。我没有使用 ALT + 数字。我用的是你建议的方法。
    • 在您的链接中,可能需要注册表设置来启用加号键 unicode 输入模式。
    【解决方案3】:

    U+2061 是“FUNCTION APPLICATION”,它是一个特殊的非打印“操作符”字符,U+2066 尚未定义(从 Unicode 5.2 开始)。因此,您在应用程序中看到的内容是正确的;可能您在记事本中输入了不同的代码?

    【讨论】:

    • 朱特又试了一次。 ALT + 2061 五个乐谱符号 - ALT + 2066 给出一个双头垂直箭头。
    • 我看到了同样的行为。音乐和双头垂直箭头。
    • 那些击键不会直接映射到相应的 Unicode 代码点。 ALT+2661 = U+266A,ALT+2066=U+2195。
    【解决方案4】:

    转到 Spy++ 并查看窗口类。是 Edit,还是 RICHEDIT 的变体? RichEdit 窗口要求您指定字体,您可以使用CRichEditCtrl::SetDefaultCharFormat 来执行此操作。

    【讨论】:

      【解决方案5】:

      我建议您在编辑控件的应用程序中的某处运行函数IsWindowUnicode()。如果它返回 TRUE,那么您肯定知道您的应用程序和控件是 unicode 感知的(然后很可能是字体问题)。 但是,如果它返回 false,您必须查看您的代码和项目设置,以找出您的应用程序/窗口不支持 unicode 的原因。

      【讨论】:

        【解决方案6】:

        是的。这是字体问题。

        我不会担心这一点,因为安装在您客户机器上的字体会与您的不同。如果他需要汉字,他就会有。您可以强制使用特定字体。然后你会在你的 Windows 上正确地看到它。

        我还建议您不要使用 W (widechar) 的东西做 unicode。见https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful

        【讨论】:

        • 谢谢。是否有一个易于测试的应用程序确实可以正确处理 Unicode 数据?我宁愿在最终用户发现问题之前把它做好,但也许我过于谨慎了?也感谢链接重新 unicode。此应用程序中的数据在存储之前会转换为 UTF8。
        • 错误 - 一般来说,如果记事本正确显示字符,这不是字体问题,因为 Windows 会尝试替换合适的字体以显示字符。
        • 所链接问题的答案在很大程度上同意每个应用程序应使用最适合其环境的任何编码,而不是避免使用 UTF-16。 UTF-8 也是一种可变长度编码,在存储大量非西方文本或符号方面非常糟糕。
        • Brianary(好名字):一些用于处理从该应用程序导出的数据(到文件)的工具只有在文件是 UTF8 编码的情况下才有效。你的意思是从存储的角度来看很差吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 2016-08-11
        相关资源
        最近更新 更多