打印UTF-8编码的字节字符串

4

我有一个表单数据:

v = "\xc5\x84"

这是一个 UTF-8 编码下的字符 "ń" 的字节表示。

如何使用变量 v 打印 >>ń<<?

我正在使用Python 2.7.2。

原始字符串中变量 v 包含了:

v = "\\xc5\\x84" (双反斜杠)

相对于

v = "\xc5\x84" (单反斜杠)

单反斜杠的 v 本身是有效的 UTF-8 字符。

2个回答

7

在我的电脑上,输出结果取决于所使用的shell/python,如下所示。
正如Klaus所评论的那样,你系统中的语言环境设置也是一个重要的因素。

>>> v = "\xc5\x84"

>>> print v   #in pycrust shell python 2.6
Å„
>>>

>>> print (v) #in idle python 3.2
Å
>>> 

这台机器有以下设置:

>>> import locale
>>> locale.getlocale()
('es_ES', 'cp1252')

无论设置如何,您都可以获得您的字符

>>> print v.decode('utf-8')
ń
>>> 

1
+1 这个方案成功的可能性最大。如果使用的是 Windows 中的命令提示符窗口(也称为 cmd.exe),在像美国和西欧这样的区域设置中,它将无法正常工作(编码为 cp437cp850),但在编码为 cp852 的中欧区域设置中应该可以正常工作。 - John Machin

-2

嗯,你不需要做任何特别的事情...只需要 print v

>>> v = "\xc5\x84"
>>> print v
ń

1
我无法在Python 2.6(pycrust)或Python 3.2(idle)中直接获得正确的打印输出。请问您能否就此发表评论? - joaquin
@joaquin 可能吧... 我使用的是和OP一样的Python 2.7.2版本,但在Python 2.6上也可以运行。或许与shell有关?我的本地语言环境设置为UTF-8(LC_CTYPE="UTF-8")。 - Klaus Byskov Pedersen
你说得对,可能是本地设置的问题。在我的情况下,locale.getlocale() 返回 ('es_ES', 'cp1252')。我想要设置 setlocale(为了完善我的回答),但我不熟悉这个模块,也无法从文档中找到方法。 - joaquin
请考虑到并非所有的机器都运行相同的操作系统、Python版本和shell。 - John Machin
@JohnMachin 已经考虑过了。我不想删除答案,因为评论中包含的信息可能对某些人有用。 - Klaus Byskov Pedersen
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接