在Windows批处理中回显UTF-8字符

42

我可以使用echo生成一个UTF-8编码的文本文件吗? 例如,如果我想要生成一个包含字符ę的文件:


echo "abcd ę" > out.txt

(该批处理文件使用UTF-8编码)

结果是一个ANSI编码的文件,并且字符ę被转换为ê。如何说服echo生成一个UTF-8文件?

如果不可能,我能在创建后更改文本文件的编码吗? 在gnuwin32包中是否有任何工具可以帮助我更改编码?

谢谢

6个回答

73

使用chcp命令将活动代码页更改为65001,以支持utf-8。

chcp 65001

11

尝试使用/U开关启动CMD.exe:它会将所有管道输出转换为Unicode而不是ANSI。


5

chcp 65001

如@cuixiping所提到的,这是一个好的答案,但需要将cmd默认字体更改为Lucida Console,例如,您可以在此处阅读: https://superuser.com/questions/237081/whats-the-code-page-of-utf-8#272184 当然,正如@BearCode所提到的,文本应该是utf-8……在我的情况下,使用GNU/Linux下的Vim进行远程访问,但notepad++也是正确的方法!

4
问题在于文件中包含这一行代码:
<META content="text/html; charset=iso-8859-2" http-equiv=Content-Type> 

然后Notepad2和Firefox改变了字符集,显示Ä而不是ę。在普通的记事本中,文件看起来没问题。 解决方法是在文件开头添加UTF-8签名(字节顺序标记):

echo1 -ne \xEF\xBB\xBF > out.htm

(echo1来自gnuwin32)

感谢提供的答案


1
从技术上讲,那是一个无效的文件。如果你添加字节顺序标记(这是一个好的方法),你应该将字符集更改为"charset=utf-8"。 - PRMan

0

在更改代码页的同时,您需要在第一个输出到文件中的echo中至少写入一个unicode字符,以便文件保存为unicode格式。 因此,您的批处理文件本身需要以UTF-8这样的unicode格式存储。


1
一个ASCII文件也是一个有效的UTF-8文件。Notepad++或其他软件可能无法告诉你它是UTF-8,但实际上它就是。如果你的文件中没有UTF BOM头,它们实际上是在寻找非ASCII字符来猜测实际编码,但不要被他们说的所迷惑,ASCII完全兼容UTF-8。(但不要混淆ASCII和US扩展ASCII) - TrogloGeek

-1
I'm not sure if this is the answer you are looking for or if it's already been answered for you... 
I'd use the catet character ( ^ ) in a batch file and output to a file using escape character ^. See examples..
Desired output...
<META content="text/html; charset=iso-8859-2" http-equiv=Content-Type> 

Replace code with this: 
Example 1: echo ^<META content="text/html; charset=iso-8859-2" http-equiv=Content-Type^> 
Example 2: echo ^<?xml version="1.0" encoding="utf-8" ?^>

1
如果您不确定您的答案是否与问题相关,您应该先阅读问题。不,这绝对不是问题的答案。 - jeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接