论坛风格切换切换到宽版
  • 4869阅读
  • 6回复

nsis 中有什么办法转换 ansi 的文本为 utf-8 [复制链接]

上一主题 下一主题
离线dujuan509
 
发帖
182
金钱
0
威望
0
只看楼主 倒序阅读 0 发表于: 2005-04-22
发现 nsis 的 writeinistr 语句生成的 ini 文件 是 ansi 格式的,有无插件可将之转换为 utf-8 ?
离线macoos
发帖
91
金钱
0
威望
0
只看该作者 1 发表于: 2005-04-22
不知道解决办法,关注中……
离线蓝色网际
发帖
1795
金钱
0
威望
0
只看该作者 2 发表于: 2005-04-22
最近正好在研究 foobar2000 的 SDK,里面就有大量的转换函数,不过在 NSIS 里面的话需要指定代码页,要不然到了非简体系统之后他就按照默认的代码页来编码了。
暂时写了个转换函数,例子如下
     ${ConvertANSIToUTF16} $0 936 "中国"
     ${ConvertUTF16ToUTF8} $0 $0
 
  !insertmacro BitOutput "$0"

输出:
0xE4 0xB8 0xAD 0xE5 0x9B 0xBD 0x0

BitOutput 宏是用来输出字符串的内码的。
这两个函数包含在 UsefulLib.nsh 里。
附件: UsefulLib.zip (23 K) 下载次数:12
不要在 PM 里问问题,PM 不是用来问问题的。
离线蓝色网际
发帖
1795
金钱
0
威望
0
只看该作者 3 发表于: 2005-04-23
发现一个问题,NSIS 的变量不能用来保存 Unicode 字符,因为像空格这样的 ASCII 字符内码为 0x2000 碰到 00 是就会被认为是字符串的结束。
所以修改了一下用内存地址来保存 Unicode 字符,另外写了两个函数来直接转换
ConvertANSIToUTF8
ConvertUTF8ToANSI
附件: UsefulLib.zip (25 K) 下载次数:15
不要在 PM 里问问题,PM 不是用来问问题的。
离线rosetta
发帖
45
金钱
0
威望
0
只看该作者 4 发表于: 2005-04-24
会不会有限制,MultiByteToWideChar这套api在非nt内核的系统上能用吗?
离线蓝色网际
发帖
1795
金钱
0
威望
0
只看该作者 5 发表于: 2005-04-25
不太清楚,不过 foobar2000 在 9X 运行是正常的。
不要在 PM 里问问题,PM 不是用来问问题的。
离线rosetta
发帖
45
金钱
0
威望
0
只看该作者 6 发表于: 2005-04-25
嗯,能用!win32系统都可以