中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 09:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 脚本对多语言OS的支持遇到问题 查看 604 回复 5
楼 主 脚本对多语言OS的支持遇到问题 发表于 2009-09-02 12:49 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
不知道这里有没有朋友涉足过多语言OS的支持性

我最近写点东西遇到一个问题,举个例子:在日文OS下,文件路径或注册表中的"\"成了类似"¥"的符号
这就给脚本的兼容性造成了一点影响

对于bat,还比较好解决,先 chcp 437 一下即可
(这一招对于注册表的相关操作可能没用,还得另想办法)

对于vbs,还没想到什么好办法,只好老老实实把有关的符号做成正则表达式来匹配
显然,这很麻烦

是否有好的解决办法?
另,如果有高人能分析一下这个文件路径和注册表中的符号的解析机制就更感激不尽了。
(我的猜想:不管什么语言版本的OS,文件系统(及其驱动)和注册表文件中实际使用的符号都是原始的"\";只不过在呈现给用户的时候,某些语言版本会加一层映射,使得用户看到的是贴合其所在国国情的"¥"或是别的什么符号了)
2 发表于 2009-09-02 13:07 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
代码前加
SetLocale("zh-cn")

看看,没有多语言系统不清楚。
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
3 发表于 2009-09-02 13:58 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
Originally posted by slore at 2009-9-2 13:07:
代码前加
SetLocale("zh-cn")

看看,没有多语言系统不清楚。


刚试了一下,locale变了,但是符号没变......
4 发表于 2009-09-02 15:01 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
转完以后用
\\做间隔的能访问和操作麽?

显示的话,应该是固有的字符串出来了。。
不然判断版本然后replace?
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
5 发表于 2009-09-02 23:11 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
明白了,就是code page的问题
\的ASCII是0x5F,这个是不变的
到了外文OS下,系统通过code page进行转换,然后显示出来
比如日文OS下,不管是用键盘直接输入\键、还是其他系统下输入过来的\,一显示就成了¥

如此一来,似乎我的问题不在于这些字符,而是另有其因了,我倒,继续debug......
6 发表于 2009-09-02 23:30 ·  中国 广东 中山 电信
初级用户
积分 102
发帖 47
注册 2008-11-10 08:29
17年会员
UID 130514
性别 男
状态 离线
另外,code page是通过system locale决定的
而之前测试的setlocale应该是user locale,无法影响code page

参考MSDN
http://msdn.microsoft.com/en-us/goglobal/bb964662.aspx
和Wiki
http://en.wikipedia.org/wiki/Windows_code_page

但这样的话,那个chcp又如何解释呢 Orz
论坛跳转: