2008-11-12 2 views
5

У меня есть небольшая консольная программа C#, которая выводит некоторый текст с помощью Console.WriteLine. Я тогда труба этот выход в текстовый файл как:windows cmd pipe не unicode даже с/U-переключателем

c:myprogram > textfile.txt

Однако файл всегда текстовый файл ANSI, даже когда я начинаю CMD с/у переключения. cmd /? говорит о/и переключатель:

/U Вывод результатов внутренних команд в трубу или файл, чтобы быть Unicode

И это действительно имеет значение, когда я делаю

c:echo "foo" > text.txt

text.txt юникод (без BOM)

Интересно, почему конвейера от моя консольная программа в новый файл также не создает файл unicode и как я могу это изменить?

Я просто использую Windows Power Shell (который создает файл unicode с правильной спецификацией), но мне все равно хотелось бы знать, как это сделать с помощью cmd.

Спасибо!

ответ

6

Коммутатор/U, как указано в документации, влияет на то, что внутренних команд генерирует выходные данные Unicode. Ваша программа не является одной из внутренних команд cmd.exe, поэтому параметр/U не влияет на нее.

Чтобы создать текстовый файл в Юникоде, вам необходимо убедиться, что ваша программа генерирует текст Unicode.

Даже этого может быть недостаточно. Я столкнулся с this blog from Junfeng Zhang, описывающим, как писать текст в кодировке Unicode в консольной программе. Он проверяет тип файла стандартного дескриптора вывода. Для файлов символов (консольного или LPT-порта) он вызывает WriteFileW. Для всех других типов ручек (включая файлы дисков и каналы) он преобразует выходную строку в текущую кодовую страницу консоли. Боюсь, я не знаю, как это переводится .Net.

2

Я посмотрел, как mscorlib реализует Console.WriteLine, и, по-видимому, он решил, какое кодирование текстового вывода использовать по вызову GetConsoleOutPutCP. Таким образом, я предполагаю (но еще не confimed), что возвращенная кодовая страница является отличительной для консоли PS, чем для консоли cmd, так что моя программа действительно выводит ansi при запуске из cmd.

+0

Да, я думаю, что вы что-то с этим делаете. – 2008-11-13 03:28:59