Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何获得;至于;要从UTF-8格式的文件中获取正确编码的文本?_Batch File_Utf 8 - Fatal编程技术网

Batch file 如何获得;至于;要从UTF-8格式的文件中获取正确编码的文本?

Batch file 如何获得;至于;要从UTF-8格式的文件中获取正确编码的文本?,batch-file,utf-8,Batch File,Utf 8,当我使用“for”读取UTF-8格式的1.txt中的每一行时,它将被篡改。 如何让批处理正确识别UTF-8编码文件 for /F "tokens=*" %%f in (1.txt) do echo %%f pause 使用以下命令: for /F "tokens=* delims= " %%f in ('type 1.txt') do echo %%f 这将真正起作用,因为type命令从文本文件中读取行,不管它是什么编码。脚本顶部运行chcp 65001,然后为控制台窗口使用的支持Unico

当我使用“for”读取UTF-8格式的1.txt中的每一行时,它将被篡改。 如何让批处理正确识别UTF-8编码文件

for /F "tokens=*" %%f in (1.txt) do echo %%f
pause
使用以下命令:

for /F "tokens=* delims= " %%f in ('type 1.txt') do echo %%f

这将真正起作用,因为type命令从文本文件中读取行,不管它是什么编码。

脚本顶部运行
chcp 65001
,然后为控制台窗口使用的支持Unicode编码字符的字体祈祷,请参阅。此外,我建议使用
delims=
(关闭行拆分行为)而不是
tokens=*
(行拆分会导致删除前导空格/制表符),并尽可能不使用
f
作为循环变量,但是,例如
L
I
#
,在cmd窗口中运行
for/?
时的帮助输出解释了这些字符不用作修饰符。顺便问一下:有什么原因不使用命令
键入
?获取有关在cmd窗口中运行此命令的帮助
键入/?
。除了添加chcp 65001之外,还必须设置cmd字体,否则它将提示系统无法写入指定的设备。在实际批处理中,我需要使用for将文件中的每一行作为参数读取到另一个cli。因此,类型不适用。如果文件
1.txt
包含非ASCII字符UTF-8编码(应在控制台窗口中正确显示),则此操作无效。如果文件
1.txt
仅包含ASCII字符,则OEM/ANSI/ASCII编码的文本文件和不带字节顺序标记(BOM)的UTF-8编码的文本文件之间将没有二进制差异。因此,
type
的使用与控制台窗口中显示不正确的非ASCII字符的问题无关。同样,如果这样做可行,只使用
type 1.txt
而不是使用command
for
在后台用
%ComSpec%/c type 1.txt
启动新的命令进程就足够了,使用
类型
处理标准输出的输出根据所用帐户的配置国家/地区,将文本从UTF-8转换为OEM代码页,通过
cmd.exe
执行
for
捕获该输出,对于
所有前导空格,从所有非空行和不以分号开头的行中删除,并在处理批处理文件的命令进程控制台窗口中输出剩余行。