![]() |
1
7
到目前为止,似乎所有的答案都来自于那些认为Windows控制台类似于Unix终端的Unix用户,而事实并非如此。
问题是,不能使用普通的底层文件I/O函数将Unicode输出写入Windows控制台。Windows API
如果将输出重定向到一个文件,则会有另一个问题:Windows文本文件历史上都在ANSI代码页中,而不是Unicode。现在在Windows中,您可以相当安全地将UTF-8写入文本文件,但默认情况下,Python不会这样做。 我认为它应该做这些事情,但这里有一些代码来实现它。如果不想,您不必担心细节;只需调用consolefile.wrap_standard_handles()。您需要安装pywin才能访问必要的API。
这有点棘手:如果stdout或stderr是控制台,我们需要用writeconsole输出;但是如果它不是(例如foo.py>文件),那就不起作用,我们需要将文件的编码改为utf-8。 在任何一种情况下,都是相反的。不能用write console输出到常规文件(它实际上不是一个字节API,而是一个utf-16;pywin隐藏了这个细节),也不能将utf-8写入Windows控制台。 而且,它确实应该使用get-osfhandle将句柄获取到stdout和stderr,而不是假设它们被分配到标准句柄,但该API似乎没有任何pywin绑定。 |
![]() |
2
-2
对于硬编码字符串,需要
specify the encoding at the top of source files
. 对于来自其他源的字节字符串输入-例如
|
![]() |
M - · 为什么两个相同的表情符号不相等? 2 年前 |
![]() |
Mohsen · 将字符串从Windows 1256转换为UTF-8 7 年前 |
![]() |
AMINA ARSHAD · 从字符转换为Unicode数字时出错 7 年前 |
![]() |
Taqwa · 在C#[已关闭]中将上标转换为Unicode 7 年前 |