编译后的VS_VERSION_INFO资源在资源管理器中出现异常乱码问题
RC版本资源编译后乱码的原因及解决方案
核心原因
- RC文件编码不符合要求
资源编译器(rc.exe)默认仅支持带BOM的UTF-16 LE(Windows下叫Unicode)、ANSI编码的RC文件。如果你的verinfo.rc保存为无BOM的UTF-8、UTF-16 BE等编码格式,编译时字符串会被错误解析,最终在资源管理器中显示乱码,这是最常见的诱因。 - 语言ID与代码页配置不匹配
StringFileInfo下的块ID规则为「语言ID十六进制值 + 代码页十六进制值」,必须和VarFileInfo里的Translation值完全对应。你示例中的配置是匹配的(0x0409是英文美国语言ID,1200对应UTF-16 LE代码页,十六进制为04b0,拼接就是040904b0),如果手动修改了其中某一处没有同步修改另一处,资源管理器就无法正确识别编码,导致乱码。 - 字符串内容格式错误
VALUE定义的字符串如果包含未转义的双引号、控制字符,或者你添加了非英文内容但没有对应修改语言ID,也会导致解析错误。 - 编译参数配置错误
若编译时给资源编译器指定了错误的代码页参数(比如/c参数指定的代码页和RC文件实际编码不一致),会导致编译过程中转码错误,损坏版本字符串。 - 重复资源冲突
如果项目中除了verinfo.rc外,还有其他资源文件也定义了VS_VERSION_INFO版本资源,编译时合并资源会发生冲突,导致最终嵌入的版本数据损坏。
对应解决方案
- 修改RC文件编码:用系统记事本打开
verinfo.rc,点击「另存为」,底部编码选择「Unicode」,覆盖保存即可。 - 同步语言与代码页配置:如果需要使用其他语言(比如简体中文),要同步修改两处配置:
StringFileInfo块ID改为"080404b0",Translation改为0x0804,1200。 - 清理特殊字符:检查所有VALUE字符串,移除未转义的特殊符号,非英文内容要和设置的语言ID匹配。
- 核对编译参数:如果是Visual Studio编译,检查「项目属性→资源→常规」中的文化配置,确认资源编译器没有指定错误的代码页参数。
- 排查重复资源:搜索整个项目的资源文件,确认只有一处
VS_VERSION_INFO版本资源定义。
VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "Company Soft" VALUE "CompanyName", "Company2" VALUE "FileDescription", "Company Soft" VALUE "FileVersion", "x.x.x.x" VALUE "InternalName", "Company Soft" VALUE "LegalCopyright", "Company2" VALUE "OriginalFilename", "abrev.exe" VALUE "ProductName", "Company Soft" VALUE "ProductVersion", "x.x.x.x" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409,1200 END END
内容的提问来源于stack exchange,提问作者delphirules
相关产品推荐
相关产品推荐

