在Windows中处理unicode字符串

Mac*_*ers 2 python unicode window

我第一次在Windows(Vista)上尝试了一个处理unicode字符的Python脚本,发现它不起作用.该脚本在Linux和OS X上完全正常,但在Windows上没有任何乐趣.这是我尝试过的小脚本:

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

import os, sys, codecs

reload(sys)
sys.setdefaultencoding('utf-8')
print "\nDefault encoding\t: %s" % sys.getdefaultencoding()
print "sys.stdout.encoding\t: %s\n" % sys.stdout.encoding

## Unicode strings
ln1 = u"?0>9<8~7|65\"4:3}2{1+_)(*&^%$£@!/`\\][=-"
ln2 = u"mnbvc xzasdfghjkl;'poiuyàtrewq€é#¢."

refStr = u"%s%s" % (ln2,ln1)
print "refSTR: ", refStr

for x in refStr:
    print "%s => %s" % (x, ord(u"%s" % x))
Run Code Online (Sandbox Code Playgroud)

当我从Windows CLI运行脚本时,出现此错误:

C:\Users\san\Scripts>python uniCode.py

Default encoding        : utf-8
sys.stdout.encoding     : cp850

refSTR;  Traceback (most recent call last):
  File "uniCode.py", line 18, in <module>
    print "refSTR; ", refStr
  File "C:\Python27\lib\encodings\cp850.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u20ac' in position
 30: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

我遇到了这个Python-wiki,并从那里尝试了一些东西但是没有用.有谁知道我还缺什么?任何帮助非常感谢.干杯!!

Ery*_*Sun 5

Windows控制台具有Unicode API,但不具有utf-8.Python正在尝试将Unicode字符编码到控制台的8位代码页cp850,这显然不起作用.据说chcp 65001Windows控制台中的代码页()支持utf-8,但它严重受损.阅读问题1602并查看sys_write_stdout.patchunicode2.py使用Unicode宽字符函数,例如WriteConsoleOutputWWriteConsoleW.不幸的是,这是一个低优先级的问题.

仅供参考,您还可以使用IDLE或其他GUI控制台(基于pythonw.exe)来运行输出Unicode字符的脚本.例如:

C:\pythonXX\Lib\idlelib\idle.pyw -r script.py
Run Code Online (Sandbox Code Playgroud)

但如果您需要编写CLI控制台工具,它不是一般解决方案.