You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NSIS版本信息UTF-8编码异常:如何实现©字符的正确UTF-16编码

解决NSIS UTF-8脚本中©字符编码问题

你遇到的问题是NSIS在处理UTF-8脚本里的非ASCII字符时,没有正确将UTF-8字节解码为Unicode字符,而是直接把每个UTF-8字节当作单字节转成了UTF-16,导致版权信息里出现了\xC2\xA9这样的错误序列。除了把整个脚本改成UTF-16编码外,还有两个简单的解决办法:

方法1:直接使用Unicode转义序列

NSIS支持在字符串中使用\uXXXX格式的Unicode转义序列(XXXX是字符的十六进制代码点)。©的Unicode代码点是U+00A9,所以你可以把版权行修改为:

VIAddVersionKey "LegalCopyright" "Me \u00A9 2022"

这样编译后,安装程序资源里的版权信息就会正确显示为Me © 2022。

方法2:定义常量复用字符

如果需要在脚本多处使用©字符,可以先定义一个常量,再在需要的地方引用:

!define COPYRIGHT_SYMBOL "\u00A9"
VIAddVersionKey "LegalCopyright" "Me ${COPYRIGHT_SYMBOL} 2022"

这种方式让代码更易读,也方便后续维护。

原理说明

NSIS 3.x对UTF-8脚本的Version Info字段处理逻辑,是直接将UTF-8字节逐字节转换为UTF-16(相当于把每个UTF-8字节当作Latin-1字符),而不是先解码UTF-8得到Unicode字符再编码为UTF-16。使用\uXXXX转义序列可以直接告诉NSIS要生成的Unicode字符,绕过这个错误的转换过程。

内容的提问来源于stack exchange,提问作者rofo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:12:46