相关疑难解决方法(0)

python 3.0,如何使print()输出unicode?

我正在使用WinXP 5.1.2600,编写一个涉及中文拼音的Python应用程序,这让我遇到了无数的Unicode问题.切换到Python 3.0已经解决了许多问题.但是由于一些奇怪的原因,控制台输出的print()函数不支持Unicode.这是一个很小的计划.

print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüel?'
print(str1)
Run Code Online (Sandbox Code Playgroud)

输出为(为了便于阅读,将尖括号更改为方括号):

    sys.stdout encoding is "cp1252"
    Traceback (most recent call last):
      File "TestPrintEncoding.py", line 22, in [module]
        print(str1)
      File "C:\Python30\lib\io.py", line 1491, in write
        b = encoder.encode(s)
      File "C:\Python30\lib\encodings\cp1252.py", line 19, in encode
        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
    UnicodeEncodeError: 'charmap' codec can't encode character '\u0101' 
    in position 4: character maps to [undefined]

请注意,ü=\xfc = 252没有问题,因为它是高位ASCII.但是ā=\u0101超过了8位.

任何人都知道如何将sys.stdout的编码更改为'utf-8'?请记住codecs,如果我理解文档正确,Python 3.0不再使用该模块.


道歉,我给你的程序没有序言.在给出3行之前,它开始如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys …
Run Code Online (Sandbox Code Playgroud)

printing unicode console stdout python-3.x

18
推荐指数
2
解决办法
2万
查看次数

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

让我们说吧

s = u"test\u0627\u0644\u0644\u0647 \u0623\u0643\u0628\u0631\u7206\u767A\u043E\u043B\u043E\u043B\u043E"
Run Code Online (Sandbox Code Playgroud)

如果我尝试直接打印,

>>> 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
Run Code Online (Sandbox Code Playgroud)

所以我在Python中将控制台更改为UTF-8(否则它将无法理解我的输入).

import win32console
win32console.SetConsoleOutputCP(65001)
win32console.SetConsoleCP(65001)
Run Code Online (Sandbox Code Playgroud)

然后输出编码为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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它会成功打印,直到它到达换行符,然后它会抛出IOError.

以下解决方法有效:

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

>>> safe_print(s)
test???? ???????????
Run Code Online (Sandbox Code Playgroud)

但必须有更好的方法.有什么建议?

python windows utf-8

6
推荐指数
1
解决办法
5223
查看次数

标签 统计

console ×1

printing ×1

python ×1

python-3.x ×1

stdout ×1

unicode ×1

utf-8 ×1

windows ×1