代码之家  ›  专栏  ›  技术社区  ›  Ben Schwehn

windows cmd管道即使使用/U开关也不是unicode

  •  7
  • Ben Schwehn  · 技术社区  · 17 年前

    我有一个小小的c#控制台程序,它使用console.WriteLine输出一些文本。然后,我将此输出导入一个文本文件,如:

    c:myprogram > textfile.txt

    但是,即使我使用/u开关启动cmd,该文件始终是ansi文本文件。

    /U导致内部输出 管道或文件的命令应为Unicode

    当我做一个实验的时候,它确实会产生不同

    c:echo "foo" > text.txt

    我想知道为什么将控制台程序的输出管道化到一个新文件中不会创建一个类似的unicode文件,我该如何更改它?

    我只是使用WindowsPowerShell(它生成一个具有正确BOM的unicode文件),但我仍然想知道如何使用cmd。

    谢谢

    2 回复  |  直到 17 年前
        1
  •  6
  •   Rob Kennedy    17 年前

    正如文档所述,/U开关会影响

    要创建Unicode文本文件,需要确保程序正在生成Unicode文本。

    尽管如此,这可能还不够。我偶然发现 this blog from Junfeng Zhang 描述如何在控制台程序中写入Unicode文本。它检查标准输出句柄的文件类型。对于字符文件(控制台或LPT端口),它调用WriteFileW。对于所有其他类型的句柄(包括磁盘文件和管道),它将输出字符串转换为控制台的当前代码页。不过,恐怕我不知道这是如何翻译成.Net术语的。

        2
  •  2
  •   Ben Schwehn    17 年前