Encoding 输入编码:接受UTF-8

Encoding 输入编码:接受UTF-8,encoding,powershell,Encoding,Powershell,我需要在PowerShell下获取本机应用程序的输出。问题是,输出是用UTF-8(无BOM)编码的,PowerShell无法识别UTF-8,只是将这些时髦的UTF字符直接转换为Unicode 我发现PowerShell有$outpuntencoding变量,但它似乎不会影响输入数据 好的ol'iconv也没有帮助,因为这不必要的UTF8就好像ASCII=>Unicode转换在下一个管道成员获取数据之前发生一样。如果您的目标是在powershell中处理本机命令中的数据,您可以尝试 ./progr

我需要在PowerShell下获取本机应用程序的输出。问题是,输出是用UTF-8(无BOM)编码的,PowerShell无法识别UTF-8,只是将这些时髦的UTF字符直接转换为Unicode

我发现PowerShell有
$outpuntencoding
变量,但它似乎不会影响输入数据


好的ol'iconv也没有帮助,因为这不必要的UTF8就好像ASCII=>Unicode转换在下一个管道成员获取数据之前发生一样。

如果您的目标是在powershell中处理本机命令中的数据,您可以尝试

./program-that-outputs-utf8 > temp.txt
get-content temp.txt -Encoding utf8 | (do_whatever)

可能需要执行“chcp 65001”(修改powershell.exe的字体后)。

PSISE可以使用此命令。

我现在看到下面的程序(stdout.cpp-cl stdout.cpp)存在问题:

请注意,fhex是一个实用程序

更新:了解了如何使其工作:

$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

你能举个例子说明你的目标是什么吗?若你们在使用文件,或者你们只是想在屏幕上显示一些数据,那个么答案可能会有所不同……我怎样才能让它更清楚呢?“/program-that-outputs-utf8>1.txt”不起作用“/program-that-outputs-utf8 | out file-enc utf8 1.txt”也不起作用。确切的程序和确切的数据不会告诉你什么。这个评论让它更清楚。我想你的意思是“UTF8就像当前的代码页”。ASCII仅定义最多0x7F的字符。UTF-8是一个严格的超集。UTF-8中的所有非ASCII字符都表示为字节序列All>=0x80。这不起作用。看,最初powershell将来自program-that-outputs-utf8的所有数据解码为ASCII,有效地在UNICODE字符串中给出UTF乱码(而不是这个乱码表示的真实字符)。然后,如果我使用“>”操作符,它将用UTF-16编码这种胡言乱语。多么简单:)这个例子表明,在某些情况下,人们确实需要了解.NET。仅仅有高雅的知识是不够的。。。
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                      .........
$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