Board logo

标题: [求助]如何将txt文本文件的utf-8编码转换成unicode编码!! [打印本页]

作者: moonofwell     时间: 2007-11-30 10:10    标题: [求助]如何将txt文本文件的utf-8编码转换成unicode编码!!

如何将txt文本文件的utf-8编码转换成unicode编码!!

注:很多个文件,不能一个一个处理,得批量处理!!!
我想转换编码的目的是要用Excel直接打开txt文件,但是打开utf-8编码的文本会变成乱码,必须得转换成unicode编码的文本文件才行。可以用记事本打开文本文件,然后“另存为”时选择编码,但是文件太多,不能一个一个操作。看看哪个高手能解决这个问题!!!
作者: fastslz     时间: 2007-11-30 11:17

@echo off
for /f "delims=" %%a in ('dir /s /b /a-d D:\test\*.txt') do (
        call cmd /u /c type "%%a">"%%~dpna.U"
        call echo move /y "%%~dpna.U" "%%a"
)
pause

作者: zh159     时间: 2007-11-30 11:32
好像批处理并不能直接处理utf-8编码的文本
作者: moonofwell     时间: 2007-11-30 11:34
不行啊,运行之后,产生了几个.u格式的文件,用记事本打开也都是乱码,不是我想要的结果欧!!!高手再看看!!!
作者: fastslz     时间: 2007-11-30 11:35
哦是吗我拿ANSI测试的
作者: moonofwell     时间: 2007-11-30 11:44
不行,编码要选择utf-8,我要转换的是utf-8到unicode。你用记事本随便写几句话,然后另存为,选择编码为:utf-f,保存
然后再运行你的程序,你看看吧。

[ Last edited by moonofwell on 2007-11-30 at 11:46 AM ]
作者: fastslz     时间: 2007-11-30 12:05
既然zh159批处理并不能直接处理utf-8也就没办法了,借助第三方工具吧
作者: moonofwell     时间: 2007-11-30 12:11
第三方工具我找到了,ConvertZ ver 7.40 ,如果能用dos批处理或vbs搞定就更好了!!!(*^_^*)
作者: fastslz     时间: 2007-11-30 13:21
UTF82Unicode.vbs
[code]
Set objArgs = WScript.Arguments
        For I = 0 To objArgs.Count - 1
            FileUrl = objArgs(I)
            Call WriteToFile(FileUrl, ReadFile(FileUrl, "UTF-8"), "Unicode")
        Next
Function ReadFile(FileUrl, CharSet)
    Dim Str
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.loadfromfile FileUrl
    Str = stm.readtext
    stm.Close
    Set stm = Nothing
    ReadFile = Str
End Function

Function WriteToFile (FileUrl, Str, CharSet)
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.WriteText Str
    stm.SaveToFile FileUrl, 2
    stm.flush
作者: fastslz     时间: 2007-11-30 13:22
UTF82Unicode.vbs
Set objArgs = WScript.Arguments
        For I = 0 To objArgs.Count - 1
            FileUrl = objArgs(I)
            Call WriteToFile(FileUrl, ReadFile(FileUrl, "UTF-8"), "Unicode")
        Next
Function ReadFile(FileUrl, CharSet)
    Dim Str
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.loadfromfile FileUrl
    Str = stm.readtext
    stm.Close
    Set stm = Nothing
    ReadFile = Str
End Function

Function WriteToFile (FileUrl, Str, CharSet)
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.WriteText Str
    stm.SaveToFile FileUrl, 2
    stm.flush
    stm.Close
    Set stm = Nothing
End Function

@echo off
for /f "delims=" %%a in ('dir /s /b /a-d D:\test\*.txt') do UTF82Unicode.vbs "%%a"
pause
直接替换模式,请先测试后应用
作者: moonofwell     时间: 2007-11-30 13:30
可以了,多谢了哥们儿,真是高手阿!!!
作者: gameyixiu     时间: 2007-12-7 17:06
楼主是utf-8编码转换成unicode
而我的问题是:
如何将UTF-8转成ANSI
还有unicode如何转成ANSI

用批处理文件如何实现?
请高手解答
作者: fastslz     时间: 2007-12-7 20:54
命令行GB2312,UTF-8,Unicode,BIG5...编码转换工具VBS版
http://www.cn-dos.net/forum/view ... ge=1&highlight=

文本文件编码查询工具 QueryCode.vbs
http://www.cn-dos.net/forum/view ... ge=1&highlight=
作者: gameyixiu     时间: 2007-12-10 15:43
谢谢楼上的

[ Last edited by gameyixiu on 2007-12-10 at 03:45 PM ]
作者: joson     时间: 2008-5-18 22:10
不错,学习中!
作者: knoppix7     时间: 2008-5-18 23:09
论坛有。。。自己搜索.
作者: mkd     时间: 2008-6-2 15:26
使用方法:
        點兩下 或 拉文件進來
       
如果用這兩種方法以外的其他方法來使用,可能會發生錯誤
@echo off
if "%~1" == "" goto main


set "wfiles=%cmdcmdline:"=%"
call set "wfiles=%%wfiles:*%~d0=%%"
call set "wfiles=%%wfiles:*%~d1=%%"
call set "wfiles=%%wfiles: %~d1=" "%~d1%%"
set wfiles="%~d1%wfiles%"

if "%cmdcmdline:~0,3%" == "cmd" call :ddd %wfiles%
if not "%cmdcmdline:~0,3%" == "cmd" set wfiles=%*
goto main

:ddd
cd/d "%~dp1"
goto :eof

::--------------------------------------------------------------
:main



echo 1        GB2312
echo 2        Big5
echo 3        Shift_JIS
echo 4        EUC-KR
echo 5        UTF-8
echo 6        Unicode
echo.
echo A --^> B       
echo A=? (1-6)
set /p aaa=
echo B=? (1-6)
set /p bbb=

echo %aaa%|findstr /be "[1-6]" >nul ||goto :eof
echo %bbb%|findstr /be "[1-6]" >nul ||goto :eof
if "%aaa%" == "%bbb%" goto :eof

if not defined wfiles set /p wfiles=Files???
if not defined wfiles  goto :eof


echo Set objFSO = CreateObject("Scripting.FileSystemObject") > MakeBOM.vbs
echo Set objFile = objFSO.CreateTextFile("Unicode.BOM",,true) >> MakeBOM.vbs
cscript //Nologo MakeBOM.vbs

md After_Convert\tmp



:loop
set vvv=%aaa%
if "%aaa%" == "6" set vvv=%bbb%

for /f "tokens=%vvv%" %%a in ("936 950 932 949 65001") do (
        reg add "HKCU\Console\%%SystemRoot%%_System32_cmd.exe" /v CodePage /t REG_DWORD /d %%a /f >nul
)

if not "%aaa%" == "6" (
        if not "%bbb%" == "6" (
        start /wait /min cmd /u /c "for %%a in (%%wfiles%%) do copy Unicode.BOM tmpfile.tmp&type "%%~fa" >> tmpfile.tmp&move /y tmpfile.tmp After_Convert\tmp\"%%~nxa""
        set aaa=6
        set wfiles=After_Convert\tmp\*
        goto loop
        )
)


if "%bbb%" == "6" (
        start /wait /min cmd /u /c "for %%a in (%%wfiles%%) do copy Unicode.BOM tmpfile.tmp&type "%%~fa" >> tmpfile.tmp&move /y tmpfile.tmp After_Convert\"%%~nxa""
        ) else (
        start /wait /min cmd    /c "for %%a in (%%wfiles%%) do type "%%~fa" >  After_Convert\"%%~nxa"")



reg delete "HKCU\Console\%%SystemRoot%%_System32_cmd.exe" /v CodePage /f >nul
del MakeBOM.vbs
del Unicode.BOM
rd After_Convert\tmp /s /q
start After_Convert
[ Last edited by mkd on 2008-6-2 at 10:35 PM ]
作者: bjjgq     时间: 2009-12-2 17:51
高手,我真是太吃惊了,学习也学不过来了