加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:52:00 所属栏目:大数据 来源:网络整理
导读:我有一个delphi 7表单: Form http://i44.tinypic.com/13ymott.jpg 和我的代码: Code http://i44.tinypic.com/x1gh9c.jpg 当我在Windows 7中运行此表单时,我看到: Windows7Form http://i41.tinypic.com/riglzl.jpg 在设计时,表单在第一个标签中有抛光字母,
我有一个delphi 7表单:

Form http://i44.tinypic.com/13ymott.jpg

和我的代码:

Code http://i44.tinypic.com/x1gh9c.jpg

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

Windows7Form http://i41.tinypic.com/riglzl.jpg

在设计时,表单在第一个标签中有抛光字母,但在运行时没有它们.它在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接口访问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工作站不同的活动CodePage.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读