在Windows中处理unicode字符串

2024-09-30 14:38:49 发布

您现在位置:Python中文网/ 问答频道 /正文

第一次,我在Windows(Vista)上试用了一个Python脚本,它处理unicode字符,结果发现它不起作用。这个脚本在Linux和osx上运行得非常好,但是在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))

从Windows CLI运行脚本时,出现以下错误:

^{pr2}$

我遇到了{a1},从那里试了一些东西,但没用。有人知道我还缺什么吗?非常感谢任何帮助。干杯!!在


Tags: 脚本linuxwindowsstdoutsysunicode字符utf
2条回答

Windows控制台有Unicode API,但没有utf-8。Python试图将Unicode字符编码到控制台的8位代码页cp850中,这显然行不通。据推测,Windows控制台中有一个支持utf-8的代码页(chcp 65001),但它严重损坏。阅读issue 1602并查看sys_write_stdout.patch和{},它们使用Unicode范围的字符函数,如WriteConsoleOutputW和{}。不幸的是,这是一个低优先级的问题。在

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

C:\pythonXX\Lib\idlelib\idle.pyw -r script.py

但如果您需要编写CLI控制台工具,则它不是一个通用的解决方案。在

setdefaultencoding和{}表示python解释器后面的编码,当您使用sys.stdout.encoding时,它表示终端使用的编码。如果要在终端的vs print文件中写入它,可以验证这一点。在

“修复”这个程序的方法是将终端编码设置为您想要的(utf-8),或者写入文件并在支持这些特定字符的编辑器中打开输出。在

相关问题 更多 >