gpt4 book ai didi

python - 如何通过管道将 Unicode 传输到 PowerShell 中的 native 应用程序

转载 作者:太空狗 更新时间:2023-10-30 01:22:09 25 4
gpt4 key购买 nike

我有一个用 Python 编写的 native 程序,它希望在 stdin 上输入。举个简单的例子,

#!python3
import sys
with open('foo.txt', encoding='utf8') as f:
f.write(sys.stdin.read())

我希望能够将 (PowerShell) 字符串作为标准输入传递给该程序。 Python 期望其标准输入采用 $env:PYTHONIOENCODING 中指定的编码,我通常将其设置为 UTF8(这样我就不会遇到任何编码错误)。

但无论我做什么,角色都会被破坏。我在网上搜索并找到了更改 [Console]::InputEncoding/[Console]::OutputEncoding 或使用 chcp 的建议, 但似乎没有任何效果。

这是我的基本测试:

PS >[Console]::OutputEncoding.EncodingName
Unicode (UTF-8)
PS >[Console]::InputEncoding.EncodingName
Unicode (UTF-8)
PS >$env:PYTHONIOENCODING
utf-8
PS >python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())"
´╗┐?

PS >chcp 1252
Active code page: 1252
PS >python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())"
?

PS >chcp 65001
Active code page: 65001
PS >python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())"
?

我该如何解决这个问题?

我什至无法解释这里发生了什么。基本上,我想要测试 (python -c "p​​rint('\N{Euro sign}')"| python -c "import sys; print(sys.stdin.read())")打印出一个欧元符号。为了理解为什么,我必须做任何必要的事情来让它工作:-)(因为这样我就可以将这些知识转化为我的真实场景,也就是能够编写工作流水线遇到 Unicode 字符时不会中断的 Python 程序)。

最佳答案

感谢 mike z,以下工作:

$OutputEncoding = [Console]::OutputEncoding = (new-object System.Text.UTF8Encoding $false)
$env:PYTHONIOENCODING = "utf-8"
python -c "print('\N{Euro sign}')" | python -c "import sys; print(sys.stdin.read())"

需要 new-object 才能获得 UTF-8没有 BOM 的编码. $OutputEncoding 变量和 [Console]::OutputEncoding 似乎都需要设置。

我仍然不完全理解这两个编码值之间的区别,以及为什么您会对它们进行不同的设置(这似乎是默认设置)。

关于python - 如何通过管道将 Unicode 传输到 PowerShell 中的 native 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com