我在Windows 7上使用Python 2.6
我从这里借了一些代码: Python,Unicode和Windows控制台
我的目标是能够在Windows控制台中显示uft-8字符串.
显然在python 2.6中
sys.setdefaultencoding函数()
不再受支持
但是,在我尝试使用它之前,我写了reload(sys),它神奇地没有错误.
此代码不会出错,但会显示有趣的字符而不是日文文本. 我相信问题是因为我没有成功更改Windows控制台的代码页.
这些是我的尝试,但它们不起作用:
reload(sys)
sys.setdefaultencoding('utf-8')
print os.popen('chcp 65001').read()
sys.stdout.encoding = 'cp65001'
Run Code Online (Sandbox Code Playgroud)
也许您可以使用win32console来更改代码页? 我尝试了我链接的网站上的代码,但它也从win32console中出错..也许该代码已经过时了.
这是我的代码,这不是错误,但打印有趣的字符:
#coding=<utf8>
import os
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)
#print os.popen('chcp 65001').read()
print(sys.stdout.encoding)
sys.stdout.encoding = 'cp65001'
print(sys.stdout.encoding)
x = raw_input('press enter to continue')
a = '???????'#.decode('utf8')
print a
x = raw_input()
Run Code Online (Sandbox Code Playgroud) 有没有办法在python 2.6中更改Windows中的控制台字体?
我在Windows 7上.
即:
import os
os.console.font = 'Lucida Console'
Run Code Online (Sandbox Code Playgroud)
*编辑 (意外发布此答案)
更多信息和问题:
我查看了Windows API:http: //msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx
看起来它具有更改控制台字体的功能:
SetCurrentConsoleFontEx
Run Code Online (Sandbox Code Playgroud)
或者至少获取有关当前字体的信息:
GetCurrentConsoleFont
GetCurrentConsoleFontEx
Run Code Online (Sandbox Code Playgroud)
我的下一步是找到一个可以使用windows API的python模块.这是一个名为pywin32:http: //sourceforge.net/projects/pywin32/
你导入的实际模块不是pywin32,而是win32api,win32net,win32console我通过完全的猜测来解决这个问题.文档在哪里?帮助运行('win32console')
没有在那里显示所提到的字体功能,它只是简单地遗漏了它们.我在这里错过了什么吗?文档在哪里?或者哪个模块具有所有API的控制台功能......?
我用UTF-8编码保存了我的脚本.
我将Windows上的代码页更改为65001.
我在python 2.6上
脚本#1
# -*- coding: utf-8 -*-
print u'Español'
x = raw_input()
Run Code Online (Sandbox Code Playgroud)
脚本#2
# -*- coding: utf-8 -*-
a = 'Español'
a.encode('utf8')
print a
x = raw_input()
Run Code Online (Sandbox Code Playgroud)
脚本#1,打印单词罚款没有错误,脚本#2做错误:
UnicodeDecodeError:'ascii'编解码器无法解码位置4中的字节0xf1:序数不在范围内(128)
我希望能够像脚本#2一样动态地打印此变量而不会出现错误.我把提到的编码('utf8')相当于做了你的字符串'
显然,这并不是因为它会引发错误.我怎么能这样做呢?