Python 按原样打印UTF-8值';s原始字符而不是其代码

Python 按原样打印UTF-8值';s原始字符而不是其代码,python,unicode,utf-8,Python,Unicode,Utf 8,请看以下代码: a = {'name': u'احسان', 'family': u'شیرزادی'} print a 如您所见,我已经用UTF-8字符填充了“name”和“family”。但当我打印a时,结果是: {'name': u'\u0627\u062d\u0633\u0627\u0646', 'family': u'\u0634\u06cc\u0631\u0632\u0627\u062f\u06cc'} 如何强制打印存储在变量中的数据?如果将dict转换为str(就像print内

请看以下代码:

a = {'name': u'احسان', 'family': u'شیرزادی'}
print a
如您所见,我已经用UTF-8字符填充了“name”和“family”。但当我打印a时,结果是:

{'name': u'\u0627\u062d\u0633\u0627\u0646', 'family': u'\u0634\u06cc\u0631\u0632\u0627\u062f\u06cc'}

如何强制打印存储在变量中的数据?

如果将
dict
转换为
str
(就像
print
内部所做的那样),它会在键和值上使用
repr
,以便打印unicode码点而不是实际字符。您可以通过单独打印值来解决此问题,例如

for key, value in a.iteritems():
    print(u"{}: {}".format(key, value))
给予

或者-如果希望输出的格式与
打印的格式相同,请使用
join

print u"{" + ", ".join(u"{}: {}".format(key, value) for key, value in a.iteritems()) + "}"
给予

请注意,这会删除字符串周围的引号(只要仅用于打印,就可以)

输出

name احسان
family شیرزادی

打印的内容正是存储在变量中的内容。除非解析源代码,否则无法区分在运行时编写的转义序列和文本。但是如果你不想打印转义序列,你可以自己格式化字符串。将数据存储为UNICODE,而不是UTF-8。要将其打印为UTF-8编码字符串,可以使用
打印['name'].encode('utf8')
{name: احسان, family: شیرزادی}
# -*- coding: utf-8 -*-
import sys
a = {'name': u'احسان', 'family': u'شیرزادی'}
for key in a:
    val = a[key].strip().encode('utf-8')
    print key, val
name احسان
family شیرزادی