惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

博客园 - Enli

IOS 命令行安装备忘 IOS开发备忘 MAC 编制计划任务 弹出式窗口管理单元备忘 Wininet请求包装类简稿 自备工具库 多屏开发的备忘 界面方面的备忘 rc资源文件的中英文应用备忘 Wininet下载类初稿 Dephi调用C#编写的WebService的一些问题与解决 (转) 关于Window的快捷方式,图标缓存的清理 Delphi 备忘五 http断点续传的单元 Delphi 代码优化(转) [转载]Delphi的四舍五入函数 同名派生的应用(转) TWebBrowser备忘 组件开发中的技巧(转)
关于delphi的程序在英文操作系统下乱码问题 - Enli - 博客园
Enli · 2010-12-29 · via 博客园 - Enli

由于delphi7编译的程序是非unicode程序(代码页),所有在英文操作系统下会有乱码的问题。

解决方法:

1. 首先在Lageuage中选"Instal files for East Asian Lanuages",这步一定要做,否则中文就乱码。

2. 区域设置里面的Advanced选默认的非Unicode的程序的的语言解释为Chinese(PRC),Delphi是非Unicode程序,而vb6和.net都是Unicode的程序,所以这步对vb6和.net程序应该是不需要

3. 但有些客户不允许进行第2步修改,特别是在跨国企业里面,因此会需要applocale程序进行转换(C:\WINDOWS\AppPatch\)

其实apploc程序主要做了下面工作:

SET __COMPAT_LAYER=#ApplicationLocale

SET ApplocaleID=0804 

而编译的程序先修改工程文件.dof中的

locale=2052

codepage=936

然后在主界面程序里面加

initialization
  SetThreadLocale($0804);
  setconsoleoutputcp(936);

中文乱码有两种,

1.是显示????,而且Ascii码也不对,是?问号的Ascii.SET ApplocaleID=0804  是解决这问题.对应的Windows Api是SetThreadLocale($0804); 如果有多Thread,要在TThread.execute中执行SetThreadLocale,不要在在TThread.Create中执行。

2.是显示奇怪的字符,但是Ascii对。SET __COMPAT_LAYER=#ApplicationLocale是解决这问题。没装中文字体(Instal files for East Asian Lanuages)就算设置了SET __COMPAT_LAYER=#ApplicationLocale也是这效果。没找到对应的一条Win Api,只能设置Form.Font.Charset = GB2312_CHARSET;

3. 标准Delphi控件和大多第三方控件都不支持Unicode, 如Tmemo进行lines.ADD后还是会出现乱码,要进行特殊处理