Board logo

标题: [文本处理] 请问如何用一个批处理文件实现多国语言的正确显示? [打印本页]

作者: jemuillot    时间: 2011-1-18 14:06     标题: 请问如何用一个批处理文件实现多国语言的正确显示?

大家好!!

我算是新来的了。

在写批处理的时候,我遇到一个问题

就是希望在大陆、港台、欧美和日本能分别用本地的文字显示。

我目前是这样做的:
首先通过call如下bat得到codepage:

  1. :getcp
  2. set %1=0
  3. FOR /F "tokens=*" %%A IN ('CHCP') DO FOR %%B IN (%%A) DO SET %1=%%B
  4. if "%1" =="" pause
  5. goto :eof
复制代码


然后根据copage分别call如下几个文件:
  1. lan0.bat
  2. lan936.bat
  3. lan950.bat
  4. 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,主代码需要这些的时候,对其解析,以变量的形式使用这些字符串
示例:
  1. @echo off
  2. for /f "tokens=2 delims=: " %%a in ('chcp') do set b=%%a
  3. for /f "tokens=1,2* delims==_" %%a in ('more +30^<"%~f0") do if %%b==%b% set "%%a=%%c"
  4. echo %var%
  5. rem
  6. ......
  7. exit
  8. :codepage
  9. var_936=你好
  10. var_437=hello
  11. ......
  12. aaa_936=是
  13. aaa_437=yes
  14. ......
复制代码

[ 本帖最后由 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