我有一个带有一堆标志的表格(静态图像),每个标志下面都是一个勾选框.用户选择复选框以允许他们使用特定语言.在设计时,我为其本地化的等效语言设置了每种语言的复选框标题,在本例中为"Español"(西班牙语).
对于几乎所有语言,这在运行时都可以正常显示,但对于几种语言,这会改为"Espa?ol".具体来说,当我选择立陶宛语时使用:
// Note: 1063 = ((SUBLANG_DEFAULT shl 10) or LANG_LITHUANIAN)
SetThreadLocale(1063);
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我只是在表单的OnShow处理程序中使用以下行重新应用标题,那么它将正确显示为"Español".
tbLangSpanish.Caption := 'Español'; // Strange, it now corrects itself!
Run Code Online (Sandbox Code Playgroud)
通过检查运行时标题是否有"?",可以稍微改进上面的代码.其中的字符然后才重新应用标题.应用程序的其余部分完美地显示立陶宛语(标签在运行时设置).
请注意,"ñ"是扩展的ASCII码241.此问题会影响其他一些扩展字符,例如"Français"中的"ç"(字符231).有趣的是,某些扩展的ASCII字符正确显示,例如."¾"(角色190).
这是IDE中的错误(使用Delphi 7)还是遗留ASCII(即非UNICODE)字符的事实?是否有一种首选方法可以在运行时检测不兼容的设计时扩展ASCII字符(可能基于区域设置)?
我执行的搜索都没有给出关于角色为什么显示为"?"的任何解释.我假设这是因为当前Windows代码页中必须缺少所请求的字符,但没有明确说明发生这种情况时显示的内容(如果不能使用UNICODE,也不知道如何解决问题).
?当从一个代码页到另一个代码页的转换失败时,该字符就会发生,因为目标代码页不包含所需的字符.这是针对ANSI Win32 API编程的必然结果.您根本无法代表所有语言中的所有字符.
唯一现实的方法是使用Unicode.从Delphi 7开始,您有两个主要选项:
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |