- ·上一篇文章:修改path变量并立即生效
- ·下一篇文章:命令行GB2312,UTF-8,Unicode,BIG5编码转换工具VBS版
- ·百度中搜索更多的关于“Unicode与ANSI的相互转换”相关内容
- ·谷歌中搜索更多的关于“Unicode与ANSI的相互转换”相关内容
- ******申明******
- 本站文章内容有部分为收录网络中其他网友内容,DOS资源站不保证所有的代码都适合你使用。
- 由于编辑匆忙,有可能造成某些脚本文件出现丢失代码或代码无法运行的情况,请网友根据情况自行修改。
- 如果能将出错部分反馈给我,那就更好了。
Unicode与ANSI的相互转换
很多命令比如findstr、for都不能识别Unicode格式的文件,而我们经常处理的文件有不少是Unicode格式,比如注册表导出文件,如果直接用for解析,结果将不会得到任何输出。
但有少数命令如find、more、type可以识别,利用这些命令可以把Unicode格式转换为ANSI格式,方法就是用这些命令读取文件,然后重定向到新文件,结果就是ANSI格式。比如一个最常用的命令:
type Unicode > ANSI
用for解析Unicode文件时也常借用type:
for /f "delims=" %%a in ('type a.reg') do ...
利用上面的方法可以很容易地将Unicode转换为ANSI,但如何将ANSI转换为Unicode呢?
C:\Documents and Settings\user\桌面>cmd /?
启动 Windows XP 命令解释程序一个新的实例
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C 执行字符串指定的命令然后终断
/K 执行字符串指定的命令但保留
/S 在 /C 或 /K 后修改字符串处理(见下)
/Q 关闭回应
/D 从注册表中停用执行 AutoRun 命令(见下)
/A 使向内部管道或文件命令的输出成为 ANSI
/U 使向内部管道或文件命令的输出成为 Unicode
/T:fg 设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON 启用命令扩展(见下)
/E:OFF 停用命令扩展(见下)
/F:ON 启用文件和目录名称完成字符 (见下)
/F:OFF 停用文件和目录名称完成字符(见下)
/V:ON 将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会
允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF 停用延缓的环境扩展。
...
CMD默认是ANSI
利用/u开关,再借助重定向,就能达到我们的目的。
比如:
cmd /u "echo 你好>u.txt"
cmd /u "type ANSI > Unicode"
此方法有一个问题,如果待转换的ANSI格式文件较大,生成的Unicode文件用记事本打开会出现乱码(可能是CMD生成的Unicode格式与Windows下的有兼容性问题)。解决办法是用word打开,打开时编码选择Unicode。或者用其他能选择编码的编辑器打开,比如Notepad2。
注意:即使运行cmd时使用了/u开关,原来不识别Unicode格式的命令如for等仍然不识别,还是要借助于识别Unicode格式的命令
下面是一个转换ANSI到Unicode的批处理:
@echo off
setlocal EnableDelayedExpansion
if "%~1"=="" (
echo 可以直接把要转换的文件拖到此脚本上
echo.
set /p file=输入文件路径或直接拖到这里→
set file=!file:"=!
start /b cmd /u /c "%~s0 "!file!""
goto :eof
)
if not "%2"=="" (
for /f "tokens=1* delims=:" %%a in ('findstr /n .* %1') do (
set "line=%%b"
echo.!line!
)
goto :eof
)
start /b cmd /u /c "%~s0 %~s1 a2u>"%~dpn1.u%~x1""

