在使用Inno Setup制作安装包时,若`.iss`脚本文件保存的编码格式为UTF-8且未带BOM(Byte Order Mark),则中文字符串(如安装界面标题、提示信息等)在编译后常出现乱码。这是因为Inno Setup默认仅正确识别ANSI或UTF-8带BOM的文本格式。当编辑器(如VS Code、Notepad++)默认以UTF-8无BOM保存文件时,中文字符无法被正确解析,导致安装界面显示乱码。解决方法是将`.iss`文件另存为“UTF-8-BOM”或“带签名的UTF-8”编码格式。此问题常见于多语言支持场景,是构建本地化安装程序时需重点关注的基础性编码兼容问题。
1条回答 默认 最新
ScandalRafflesia 2025-09-29 13:30关注1. 问题现象:Inno Setup 编译后中文乱码的典型表现
在使用 Inno Setup 制作 Windows 安装包时,开发者常遇到安装界面中的中文字符显示为乱码(如“䏿–‡”或方框)。该现象多出现在以下场景:
- 脚本中定义了
[Messages]或[CustomMessages]的中文内容 - 设置了
AppName=我的应用程序等含中文字段 - 使用了多语言支持模块(
[Languages])进行本地化
尽管源码编辑器中中文正常显示,但编译生成的安装程序仍出现乱码,初步排查排除字体或系统区域设置问题后,应重点检查脚本文件编码。
2. 根本原因分析:Inno Setup 对文本编码的解析机制
Inno Setup 编译器(ISCC.exe)基于 Pascal Script 构建,其文本处理逻辑依赖于明确的编码标识。其默认行为如下表所示:
编码格式 BOM 存在性 Inno Setup 支持情况 ANSI 无 ✅ 完全支持(默认系统代码页) UTF-8 无 ❌ 不识别,误判为 ANSI 导致乱码 UTF-8 有(EF BB BF) ✅ 正确识别并解析中文 UTF-16 LE/BE 有 ✅ 支持,但不推荐用于 .iss 当编辑器以 UTF-8 无 BOM 保存 .iss 文件时,Inno Setup 编译器无法感知其实际编码,按当前系统 ANSI 代码页(如 Chinese Simplified GBK)解析 UTF-8 字节流,造成字符错位。
3. 解决方案路径:从手动修正到自动化预防
- 手动修复:在文本编辑器中将 .iss 文件另存为“UTF-8 with BOM”格式
- 编辑器配置:设置 VS Code、Notepad++ 等工具默认保存为 UTF-8-BOM
- CI/CD 集成:在构建流水线中加入编码校验脚本
- 团队规范:制定 .iss 脚本编码标准并纳入代码审查清单
以下为 Notepad++ 中设置编码的步骤示例:
1. 打开 .iss 文件 2. 菜单栏选择“格式” → “转为 UTF-8-BOM 编码” 3. 保存文件 4. 重新编译安装包
4. 技术验证流程图:诊断与修复闭环
graph TD A[发现安装界面中文乱码] --> B{检查.iss文件编码} B -- UTF-8 无 BOM --> C[转换为 UTF-8-BOM] B -- UTF-8-BOM --> D[检查其他可能因素] B -- ANSI --> E[确认是否匹配系统代码页] C --> F[重新编译安装包] F --> G[验证界面显示正常] D --> H[排查字体/语言包配置] E --> I[考虑统一转为 UTF-8-BOM] G --> J[问题解决] H --> J I --> F5. 多语言支持中的工程化实践
在实现多国语言安装包时,建议采用以下结构:
[Languages] Name: "chinesesimplified"; MessagesFile: "compiler:Default.isl" Name: "english"; MessagesFile: "compiler:Languages\English.isl" [CustomMessages] chinesesimplified.welcomeLabel=欢迎使用 安装向导 english.welcomeLabel=Welcome to the Setup Wizard [Code] procedure InitializeWizard(); begin WizardForm.WelcomeLabel.Caption := ExpandConstant('{cm:welcomeLabel}'); end;所有引用中文的 .iss 或 .isl 文件均需保存为 UTF-8-BOM,确保跨平台协作时编码一致性。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 脚本中定义了