簡體   English   中英

Python 2.7:在Windows控制台中輸出utf-8

[英]Python 2.7: output utf-8 in Windows console

讓我們說吧

s = u"test\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u7206\u767A\u043E\u043B\u043E\u043B\u043E"

如果我嘗試直接打印,

>>> print s
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'cp932' codec can't encode character u'\u0627' in position 4: illegal multibyte sequence

所以我在Python中將控制台更改為UTF-8(否則它將無法理解我的輸入)。

import win32console
win32console.SetConsoleOutputCP(65001)
win32console.SetConsoleCP(65001)

然后輸出編碼為utf-8的字符串,因為Python不知道chcp 65001是UTF-8(一個已知的bug )。

>>> print s.encode('utf-8')
testالله أكبر爆発ололоTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 0] Error

正如您所看到的,它會成功打印,直到它到達換行符,然后它會拋出IOError。

以下解決方法有效:

def safe_print(str):
    try:
        print str.encode('utf-8')
    except:
        pass
    print

>>> safe_print(s)
testالله أكبر爆発ололо

但必須有更好的方法。 有什么建議?

SO中搜索 python utf8窗口帶來了第一個結果,問題是在Windows XP上用UTF8打印python,控制台描述了在Windows中從Windows打印utf8的問題。

我沒有在Windows上測試它,但是在這里你可以得到一個小的初始化腳本,用於win / linux正確設置輸出編碼,包括日志接口等。該模塊還使輸出着色(包括更新'logging'接口)? 但你可以輕松地減少不必要的功能:-)。

如何調用非彩色變體:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from setupcon import setup_console
setup_console('utf-8', False)

和彩色變體:

import setupcon
setupcon.setup_console()
import logging
#...
if setupcon.ansi:
    logging.getLogger().addHandler(setupcon.ColoredHandler())

如果解決方案適合您,您可以在這里閱讀文檔: http//habrahabr.ru/blogs/python/117236/ ,俄語,或者我/有人可以根據需要為您翻譯:-)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM