gpt4 book ai didi

delphi - 扩展 ASCII 字符显示为 ? (问号)

转载 作者:行者123 更新时间:2023-12-03 18:13:08 29 4
gpt4 key购买 nike

我有一个带有一堆标志(静态图像)的表单,每个标志下方都有一个勾选框。用户选择复选框以允许他们使用特定语言。在设计时,我为每种语言设置了对应的本地化复选框标题,在此示例中为“Español”(西类牙语)。

Design-time Spanish image and checkbox

对于几乎所有语言,这在运行时都显示得很好,但对于一些语言,它会更改为“Espa?ol”。具体来说,当我选择立陶宛语并使用时会发生这种情况:

// Note: 1063 = ((SUBLANG_DEFAULT shl 10) or LANG_LITHUANIAN)
SetThreadLocale(1063);

Spanish text at runtime (without modification)

奇怪的是,如果我只是在表单的 OnShow 处理程序中重新应用带有以下行的标题,那么它会正确显示为“Español”。

tbLangSpanish.Caption := 'Español';  // Strange, it now corrects itself!

通过检查运行时标题是否有“?”,上述代码可能会略有改进。其中的字符,然后才重新应用标题。应用程序的其余部分完美地显示立陶宛语(标签在运行时设置)。

请注意,“ñ”是扩展 ASCII 代码 241。此问题会影响其他几个扩展字符,例如“Français”中的“ç”(字符 231)。有趣的是,一些扩展的 ASCII 字符可以正确显示,例如。 “¾”(字符 190)。

这是 IDE(使用 Delphi 7)中的一个错误,还是只是遗留 ASCII(即非 UNICODE)字符的一个事实?是否有一种首选方法可以在运行时(可能基于语言环境)检测不兼容的设计时扩展 ASCII 字符?

我执行的所有搜索都没有解释为什么字符会显示为“?”。我假设这是因为当前 Windows 代码页中一定缺少请求的字符,但我找不到任何引用资料明确说明发生这种情况时显示的内容(也没有说明如果不能使用 UNICODE 如何解决该问题)。

最佳答案

? 字符是当从一个代码页到另一个代码页的转换失败时发生的情况,因为目标代码页不包含所需的字符。这是针对 ANSI Win32 API 编程的必然结果。您根本无法表示所有语言的所有字符。

唯一现实的前进方式是使用 Unicode。从 Delphi 7 开始,您有两个主要选择:

  1. 坚持使用 Delphi 7 并使用 TNT Unicode 组件。
  2. 升级到 native 支持 Unicode 的现代版本的 Delphi。

关于delphi - 扩展 ASCII 字符显示为 ? (问号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625158/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com