gpt4 book ai didi

Delphi 7 - 为什么 Windows 7 在运行时更改字符编码?

转载 作者:行者123 更新时间:2023-12-03 15:01:13 26 4
gpt4 key购买 nike

我有一个 delphi 7 表单:

Form

和我的代码:

Code

当我在 Windows 7 中运行此表单时,我看到:

Windows7Form

在设计时,表单的第一个标签中有波兰字母,但在运行时没有。在 Vista 或 Windows XP 上看起来没问题。当我在代码中设置第二个标签的标题时,一切正常并且字符被正确编码。

Windows 7 顶部标签的前 5 个代码:65 97 69 101 83

Windows Vista/XP 顶部标签的前 5 个代码:165 185 202 234 140

每个系统底部标签的前 5 个代码:165 185 202 234 140

Windows 7 更改编码,为什么?我的系统设置似乎没问题。我在控制面板中为非 unicode 应用程序设置了正确的语言。

编辑

此问题不仅与表单上的标签有关,还与 FastReport(切换到 EASTERN_CHARSET 可以解决问题)或通过 COM 接口(interface)访问 Microsoft Excel 相关。

最佳答案

我确实在 win XP 中重现了 Delphi 2010 中的行为。

procedure Button1Click(Sender : TObject);
begin
ShowMessage(AnsiString(Label1.Caption));
end;

在这种情况下,Label1.Caption 到 AnsiString 的转换是通过 WideCharToMultiByte 完成的。 (Windows API)。

API 有以下注释:

The ANSI code pages can be different on different computers, or can be changed for a single computer, leading to data corruption. For the most consistent results, applications should use Unicode, such as UTF-8 or UTF-16, instead of a specific code page, unless legacy standards or data formats prevent the use of Unicode. If using Unicode is not possible, applications should tag the data stream with the appropriate encoding name when protocols allow it. HTML and XML files allow tagging, but text files do not.

因此,我的最佳猜测是,行为差异是由于您所使用的 Windows 7 版本与 Vista/XP 工作站上的事件代码页不同。

我仍然需要找到如何获取系统上的事件代码页...我最好的猜测是它是在控制面板的区域设置中定义的。但我还需要验证这一点...

关于Delphi 7 - 为什么 Windows 7 在运行时更改字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2551329/

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