中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 08:53
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 脚本对多语言OS的支持遇到问题
可打印版本  602 / 5
第1楼 azziporah 发表于 2009-09-02 12:49
初级用户 发帖 47 积分 102
脚本对多语言OS的支持遇到问题
不知道这里有没有朋友涉足过多语言OS的支持性

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

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

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

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

看看,没有多语言系统不清楚。
第3楼 azziporah 发表于 2009-09-02 13:58
初级用户 发帖 47 积分 102
Originally posted by slore at 2009-9-2 13:07:
代码前加
SetLocale("zh-cn")

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


刚试了一下,locale变了,但是符号没变......
第4楼 slore 发表于 2009-09-02 15:01
铂金会员 发帖 2,478 积分 5,212
转完以后用
\\做间隔的能访问和操作麽?

显示的话,应该是固有的字符串出来了。。
不然判断版本然后replace?
第5楼 azziporah 发表于 2009-09-02 23:11
初级用户 发帖 47 积分 102
明白了,就是code page的问题
\的ASCII是0x5F,这个是不变的
到了外文OS下,系统通过code page进行转换,然后显示出来
比如日文OS下,不管是用键盘直接输入\键、还是其他系统下输入过来的\,一显示就成了¥

如此一来,似乎我的问题不在于这些字符,而是另有其因了,我倒,继续debug......
第6楼 azziporah 发表于 2009-09-02 23:30
初级用户 发帖 47 积分 102
另外,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
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023