Board logo

标题: [文本处理] 批处理for /f不支持UTF-8编码怎么办? [打印本页]

作者: applba    时间: 2011-5-25 01:05     标题: 批处理for /f不支持UTF-8编码怎么办?

如题。有什么变通的办法吗?

要求不要使用第三方工具,不能转换文本文件编码到ansi。
作者: batman    时间: 2011-5-25 01:08

先type或more
作者: applba    时间: 2011-5-25 02:45

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
复制代码

作者: qzwqzw    时间: 2011-5-25 08:33

碰到UTF-8的文件
应用要求不高的直接以乱对乱
直接以UTF-8在ANSI下的乱码形式进行处理
应用要求较高一般先转换编码再处理

cmd处理UTF-8的能力较弱
可以使用chcp 65001转换代码页
并改换cmd窗口字体为Lucida Console后
可以type文件显示正常
但是无法用for/f进行文本分析
作者: fengyun530    时间: 2011-5-25 09:24

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是在上下文的什么地方呢?
作者: wc726842270    时间: 2011-5-25 11:49

3# applba

type和more对UNICODE起作用,但是UTF-8就不得而知了
作者: Bearxy    时间: 2011-5-25 12:23

set "n=%%b
这里的b是在上下文的什么地方呢?
fengyun530 发表于 2011-5-25 09:24

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

他上文不是有个tokens=3,4嘛,第三节是%%a,第四节就是%%b了.
作者: applba    时间: 2011-5-25 20:46

4# qzwqzw


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


看来还是python有搞头,慢慢啃python mannual
作者: 秋风·飞扬    时间: 2012-5-13 15:27

要是解决不了,就推荐个第三方软件吧,要是能解决就说具体一点的解决办法,我也等着用呢
作者: Demon    时间: 2012-5-13 20:56

  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
作者: Demon    时间: 2012-8-19 11:18

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

此题无解~~~~~~~~~~~~
作者: QIAOXINGXING    时间: 2012-9-29 10:17

此题无解~~~~~~~~~~~~
狗屁不通 发表于 2012-8-19 19:23



    11楼的不是可以吗???????




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