标题: [文本处理] 请问如何用一个批处理文件实现多国语言的正确显示? [打印本页]
作者: jemuillot 时间: 2011-1-18 14:06 标题: 请问如何用一个批处理文件实现多国语言的正确显示?
大家好!!
我算是新来的了。
在写批处理的时候,我遇到一个问题
就是希望在大陆、港台、欧美和日本能分别用本地的文字显示。
我目前是这样做的:
首先通过call如下bat得到codepage:
- :getcp
-
- set %1=0
-
- FOR /F "tokens=*" %%A IN ('CHCP') DO FOR %%B IN (%%A) DO SET %1=%%B
-
- if "%1" =="" pause
-
- goto :eof
复制代码
然后根据copage分别call如下几个文件:
- lan0.bat
- lan936.bat
- lan950.bat
- lan932.bat
复制代码
上述几个bat内部都是对字符串赋值的。
这样,在主bat中就可以根据地区的不同,正确地显示出文字。
我之前是想用一个文件完成的。
但发现一个问题,就是乱码问题。
如果在简体中文的系统中编辑那个bat,虽然在编辑器中看到的都不是乱码,但事实上是因为GBK都包含了那些字符。
当这样的BAT实际运行在大陆以外的地区时,都会出现乱码,甚至是整个BAT解析失败。
反之,如果要在一个BAT中为了最终不出现乱码,那么编辑时就不能使用GBK。
这样,也会遇到在任何系统都解析失败……
我想过用Unicode保存BAT,但好像保存后,@echo off就解析失败。
所以就不知道该怎么办了?
特来求助。
希望能得到帮助
谢谢!!
作者: hanyeguxing 时间: 2011-1-18 15:22
方法1:保存Unicode,并去掉编码文件头
方法2:
1,主代码使用ANSI编码,并且内部不能使用中文等字符。
2,将所需要的语言字符串全部写到批处理的下半部分,定义变量
3,主代码需要这些的时候,对其解析,以变量的形式使用这些字符串
示例:- @echo off
- for /f "tokens=2 delims=: " %%a in ('chcp') do set b=%%a
- for /f "tokens=1,2* delims==_" %%a in ('more +30^<"%~f0") do if %%b==%b% set "%%a=%%c"
- echo %var%
- rem
- ......
- exit
- :codepage
- var_936=你好
- var_437=hello
- ......
- aaa_936=是
- aaa_437=yes
- ......
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-18 15:42 编辑 ]
作者: jemuillot 时间: 2011-1-18 23:04
原帖由 hanyeguxing 于 2011-1-18 15:22 发表
方法1:保存Unicode,并去掉编码文件头
方法2:
1,主代码使用ANSI编码,并且内部不能使用中文等字符。
2,将所需要的语言字符串全部写到批处理的下半部分,定义变量
3,主代码需要这些的时候,对其解析,以变量 ...
感觉还是第一种方法比较直观方便
另外,采用第一种方法的话,用哪个编辑器比较好呢?
就是直接编辑的时候就是Unicode的
然后也能保存成去头的BAT
我用过UltraEdit,貌似不是很给力
不会要用XP自带的Notepad吧,然后再用UltraEdit去头?
谢谢!
作者: hanyeguxing 时间: 2011-1-18 23:19
第一种方法只是说如何保存文件为Unicode的。如果要保存bat文件是不可以的。
[ 本帖最后由 hanyeguxing 于 2011-1-18 23:26 编辑 ]
作者: jemuillot 时间: 2011-1-19 14:19
原帖由 hanyeguxing 于 2011-1-18 23:19 发表
第一种方法只是说如何保存文件为Unicode的。如果要保存bat文件是不可以的。
感觉像语法分析题
根据我的理解,用Unicode写好BAT后保存,然后用二进制工具去掉Unicode头就完事了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |