Входное кодирование: принятие UTF-8

Я должен получить вывод исходного приложения под PowerShell. Проблема, вывод кодируется UTF-8 (никакой BOM), который PowerShell не распознает и просто преобразовывает те броские символы UTF непосредственно в Unicode.

Я нашел, что PowerShell имеет $OutputEncoding переменная, но это, кажется, не влияет на входные данные.

Старый добрый iconv не имеет справки также, начиная с этого ненужного UTF8-as-if-ASCII =>, преобразование Unicode происходит, прежде чем следующий конвейерный участник получает данные.

7
задан MSalters 26 May 2010 в 06:55
поделиться

3 ответа

Теперь я вижу проблему с программой ниже (stdout.cpp - cl stdout.cpp):

#include <stdio.h>

void main()
{
    char bytes[] = { 0x41, 0x53, 0x43, 0x49, 
                     0x49, 0x20, 0x6F, 0x75, 
                     0x74, 0x70, 0x75, 0x74,
                     0xE1, 0xBE, 0xB9};

    for (int i = 0; i < 15; i++)
    {
        printf("%c", bytes[i]);
    }                
}

И запуск этого через | Out-File -enc UTF8 foo.txt дает тарабарщину:

PS> fhex foo.txt

Address:  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F ASCII
-------- ----------------------------------------------- ----------------
00000000 EF BB BF 41 53 43 49 49 20 6F 75 74 70 75 74 0D ...ASCII output.
00000010 9F E2 95 9B E2 95 A3 0D 0A                      .........

Обратите внимание, что fhex - это PSCX утилита.

UPDATE: Разобрался, как заставить это работать:

$enc = [Console]::OutputEncoding
[Console]::OutputEncoding = [text.encoding]::utf8
.\stdout.exe | out-file fubar3.txt -enc utf8
fhex .\fubar3.txt

Address:  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F ASCII
-------- ----------------------------------------------- ----------------
00000000 EF BB BF 41 53 43 49 49 20 6F 75 74 70 75 74 E1 ...ASCII output.
00000010 BE B9 0D 0A                                     ....

[Console]::OutputEncoding = $enc
12
ответ дан 7 December 2019 в 01:17
поделиться

Возможно, вам нужно выполнить «chcp 65001» (после изменения шрифта powershell.exe).
Эта команда доступна в PSISE.

0
ответ дан 7 December 2019 в 01:17
поделиться

Если ваша цель - обработка данных из родной команды в powershell, вы можете попробовать

./program-that-outputs-utf8 > temp.txt
get-content temp.txt -Encoding utf8 | (do_whatever)
-2
ответ дан 7 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: