使用python使用chcp 65001预先激活的启动控制台窗口

使用python使用chcp 65001预先激活的启动控制台窗口,python,windows,python-3.x,unicode,console,Python,Windows,Python 3.x,Unicode,Console,我使用一个python库将Unicode字符打印到windows控制台。如果我调用库中打印Unicode字符的函数,它将抛出一个异常“charmap”编解码器无法编码字符 这就是我试图解决的错误: 在调用库函数之前,使用os.system(“chcp 65001”)从python调用“chcp 65001”windows控制台命令 我知道有类似的问题,这就是为什么我尝试上述解决方案。它成功地调用了控制台上的命令,并告诉我它激活了代码页 然而,例外情况再次出现。如果我尝试在不关闭上一个控制台的情况

我使用一个python库将Unicode字符打印到windows控制台。如果我调用库中打印Unicode字符的函数,它将抛出一个异常
“charmap”编解码器无法编码字符

这就是我试图解决的错误: 在调用库函数之前,使用
os.system(“chcp 65001”)
从python调用“chcp 65001”windows控制台命令

我知道有类似的问题,这就是为什么我尝试上述解决方案。它成功地调用了控制台上的命令,并告诉我它激活了代码页

然而,例外情况再次出现。如果我尝试在不关闭上一个控制台的情况下再次运行该程序,则该程序将毫无例外地成功执行。这意味着上述控制台命令在第一次尝试后生效


我的问题是:是否有一种方法可以通过预先激活Unicode支持来启动windows控制台,这样我就不必调用该程序两次。

/k chcp 65001
添加到启动cmd窗口的快捷方式中。或者,使用Python 3.6,它使用Windows Unicode API写入控制台并忽略代码页。但是,您仍然需要字体支持打印内容。

下一步设置适用于Windows 8.1:

==> set "PYTHONIOENCODING=UTF-8"

==> chcp 65001
Active code page: 65001

==> type "%APPDATA%\Python\Python35\site-packages\usercustomize.py"
import win_unicode_console
win_unicode_console.enable()
测试:

测试中的字符串(无意义,仅用于演示):

  • 拉丁语,中欧语
  • 希腊语
  • 西里尔文
  • ğüşi
    拉丁语、土耳其语

另一种选择是使用
win\u unicode\u控制台
模块,而不是使用代码页65001——至少在Microsoft修复控制台(conhost.exe)以使其与UTF-8正常工作之前。即使在Windows 10中,当使用代码页65001时,也只能从控制台读取ASCII(0-127),而在Windows 7(8+中已修复)中,所有依赖
WriteFile
返回写入字节数的程序,而不是写入解码UTF-16代码的数量(在BMP中,1-3 UTF-8字节映射为1 UTF-16代码),最终都会进行多次写入,每次写入非ASCII字符后都会留下一个垃圾流。Windows用户的一个常见误解是将控制台称为“cmd窗口”。cmdshell与控制台窗口没有本质上的关系。它可以在没有控制台的情况下独立运行。如果它连接到控制台,那么它只是一个常规的客户端进程,与python.exe、powershell.exe、doskey.exe、chcp.com或mode.com没有什么不同(“.com”是一个遗留扩展;它们是64位PE二进制文件)。@马克,就像你建议的那样,我使用了python 3.6,它工作起来很有魅力。谢谢>“您仍然需要打印内容的字体支持”如何确定要使用哪种字体?我的一些表情符号打印为方框替换字符。使用
chcp
无法解决此问题,请使用此处列出的解决方案:
==> python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> print (u'ěščřžýáíé ;ςερτυ яшертю ğüşi')
ěščřžýáíé ;ςερτυ яшертю ğüşi
>>>