Board logo

标题: [文本处理] 为什么批处理echo输出给乱码了? [打印本页]

作者: lj84831253    时间: 2010-4-26 22:08     标题: 为什么批处理echo输出给乱码了?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. wget  "http://clubl.lexun.com/zone/onlineuser.aspx?cd=0&lxt=" -O 1.tmp
  4. grep "friUserid" 1.tmp > 2.tmp
  5. for /f "tokens=2 delims=>" %%a in (2.tmp) do (
  6.    set b=%%a
  7.    set b=!b:~0,-9!
  8.   echo !b! >> name.txt
  9. )
复制代码

为什么我这样写输出后name.txt会乱码呀?谁能帮我解决下吗?
由于附件最大只能上传200KB的,所以wget.exe和grep.exe两个第三方我上传不了,麻烦没有的去第三方的版块下载。谢谢了!
作者: hanyeguxing    时间: 2010-4-26 22:11

因为文本是utf-8编码的。。。
for /f的时候使用type

[ 本帖最后由 hanyeguxing 于 2010-4-26 22:13 编辑 ]
作者: lj84831253    时间: 2010-4-27 07:19

原帖由 hanyeguxing 于 2010-4-26 22:11 发表
因为文本是utf-8编码的。。。
for /f的时候使用type
@echo off
setlocal enabledelayedexpansion
wget  "http://clubl.lexun.com/zone/onlineuser.aspx?cd=0&lxt=" -O 1.tmp
grep "friUserid" 1.tmp > 2.tmp
for /f "tokens=2 delims=>" %%a in ('type 2.tmp') do (
   set b=%%a
   set b=!b:~0,-9!
  echo !b! >> name.txt
)
我这样,为什么还是不行呢?
作者: lj84831253    时间: 2010-4-27 16:56

顶呀,,谁知道怎么解决?
作者: hanyeguxing    时间: 2010-4-27 17:06

楼主就不能把要处理的原始文本的相关信息和内容贴点或上传上来?
作者: lj84831253    时间: 2010-4-27 21:59

这个文件就是1.tmp呵呵,谢谢了。1.tmp就是通过wget下载下来的。
作者: lj84831253    时间: 2010-4-28 08:25

顶起来给大侠们看!
作者: lj84831253    时间: 2010-4-28 17:46

为什么,,还没人。。。知道肯定很多人都会。。为什么没人帮下呀,,
作者: hanyeguxing    时间: 2010-4-28 18:17

  1. @echo off
  2. wget  "http://clubl.lexun.com/zone/onlineuser.aspx?cd=0&lxt=" -O 1.tmp
  3. grep "friUserid" 1.tmp>2.tmp
  4. chcp 437 >nul
  5. for /f "tokens=2 delims=>" %%a in (2.tmp) do (set b=%%a
  6. setlocal enabledelayedexpansion
  7. >>name.txt echo.!b:~0^,-9!
  8. Endlocal)
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-28 18:50 编辑 ]
作者: lj84831253    时间: 2010-4-28 22:28

chcp是第三方吗?如果不是的话,为什么我还是乱码呀。。。。
作者: lj84831253    时间: 2010-4-29 16:55

唉,,,等待,,
作者: GNU    时间: 2010-4-29 22:42     标题: 回复 10楼 的帖子

chcp是系统自带的命令,你亲自试试就知道了。
作者: lj84831253    时间: 2010-5-1 10:49

我亲试了,可是还是乱码。。。
作者: Spring    时间: 2010-5-1 13:53

下载的网页是 UTF-8 编码,而CMD只能识别ASCII和UNICODE(通常这么叫,全称是 unicode little-endian)编码,你需要转换成 UNICODE 编码。

没有测试,ConCMD.exe 是一个三方工具。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. wget  "http://clubl.lexun.com/zone/onlineuser.aspx?cd=0&lxt=" -O 1.tmp
  4. concmd /o:ule 1.tmp
  5. grep "friUserid" 1.tmp > 2.tmp
  6. for /f "tokens=2 delims=>" %%a in ('type 2.tmp') do (
  7.    set b=%%a
  8.    set b=!b:~0,-9!
  9.   echo !b! >> name.txt
  10. )
复制代码

[ 本帖最后由 Spring 于 2010-5-1 14:06 编辑 ]




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2