找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 41739|回复: 12

[文本处理] 批处理for /f不支持UTF-8编码怎么办?

[复制链接]
发表于 2011-5-25 01:05:42 | 显示全部楼层 |阅读模式
如题。有什么变通的办法吗?

要求不要使用第三方工具,不能转换文本文件编码到ansi。
发表于 2011-5-25 01:08:04 | 显示全部楼层
先type或more
 楼主| 发表于 2011-5-25 02:45:29 | 显示全部楼层
2# batman

type和more均无效。

测试代码
  1. @echo off
  2. SETLOCAL EnablEdElayEdExpansion
  3. ( for /f "skip=8 tokens=3,4 delims=<>" %%a in ('more plugin.txt') do (
  4. set "n=%%b                "
  5. set n=!n:~1,15!
  6. echo !n! %%a
  7. ))>1.txt
  8. start /max 1.txt
  9. pause
复制代码
发表于 2011-5-25 08:33:23 | 显示全部楼层
碰到UTF-8的文件
应用要求不高的直接以乱对乱
直接以UTF-8在ANSI下的乱码形式进行处理
应用要求较高一般先转换编码再处理

cmd处理UTF-8的能力较弱
可以使用chcp 65001转换代码页
并改换cmd窗口字体为Lucida Console后
可以type文件显示正常
但是无法用for/f进行文本分析
发表于 2011-5-25 09:24:52 | 显示全部楼层
2# batman

type和more均无效。

测试代码@echo off
SETLOCAL EnablEdElayEdExpansion
( for /f "skip=8 tokens=3,4 delims=" %%a in ('more plugin.txt') do (
set "n=%%b                "
set n=!n:~1, ...
applba 发表于 2011-5-25 02:45


set "n=%%b
这里的b是在上下文的什么地方呢?
发表于 2011-5-25 11:49:37 | 显示全部楼层
3# applba

type和more对UNICODE起作用,但是UTF-8就不得而知了
发表于 2011-5-25 12:23:36 | 显示全部楼层
set "n=%%b
这里的b是在上下文的什么地方呢?
fengyun530 发表于 2011-5-25 09:24

倒,哥们看来你的FOR比我还水呀,哈哈.建议你看看论坛的FOR教程.

他上文不是有个tokens=3,4嘛,第三节是%%a,第四节就是%%b了.
 楼主| 发表于 2011-5-25 20:46:40 | 显示全部楼层
4# qzwqzw


倒……
unicode包含ucs-2 big edition和little editon
utf-8又分为又bom和无bom格式……


看来还是python有搞头,慢慢啃python mannual
发表于 2012-5-13 15:27:58 | 显示全部楼层
要是解决不了,就推荐个第三方软件吧,要是能解决就说具体一点的解决办法,我也等着用呢
发表于 2012-5-13 20:56:13 | 显示全部楼层

  1. @echo off
  2. SETLOCAL EnablEdElayEdExpansion
  3. chcp 65001
  4. (for /f "skip=8 tokens=3,4 delims=<>" %%a in (plugin.txt) do (
  5. set "n=%%b                "
  6. set n=!n:~1,15!
  7. echo !n! %%a
  8. ))>1.txt
  9. start /max 1.txt
  10. pause
复制代码
Microsoft Windows 7 Ultimate Service Pack 1
发表于 2012-8-19 11:18:51 | 显示全部楼层
XP下CMD有BUG,chcp 65001会导致错误,就上面的文本而言可以这么处理。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. chcp 437 > nul
  4. (for /f "skip=8 tokens=3,4 delims=<>" %%a in (plugin.txt) do (
  5.     set "b=%%b"
  6.     echo !b:~1! %%a
  7. )) > 1.txt
  8. pause
复制代码
发表于 2012-8-19 19:23:40 | 显示全部楼层
此题无解~~~~~~~~~~~~
发表于 2012-9-29 10:17:36 | 显示全部楼层
此题无解~~~~~~~~~~~~
狗屁不通 发表于 2012-8-19 19:23



    11楼的不是可以吗???????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 16:42 , Processed in 0.021038 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表