无法在python中将unicode转换为utf-8

无法在python中将unicode转换为utf-8,python,unicode,utf-8,encode,Python,Unicode,Utf 8,Encode,这一定是件小事,但我办不到。 我有这样的json {' city': u'\\u0410\\u0431\\u0430\\u043a\\u0430\\u043d', 'language':{ u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439': 5608, u'\\u0418\\u0442\\u04

这一定是件小事,但我办不到。 我有这样的json

        {'
          city': u'\\u0410\\u0431\\u0430\\u043a\\u0430\\u043d', 
        'language':{
          u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439': 5608,      
          u'\\u0418\\u0442\\u0430\\u043b\\u044c\\u044f\\u043d\\u0441\\u043a\\u0438\\u0439': 98
        }
    },
我正在尝试将unicode字符串转换为utf-8

string=u'\u0410\u0431\u0430\u043a\u0430\u043d'
string.encode('utf-8')
我有

'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'
而不是:

u'Абакан'
我做错了什么

我做错了什么

不打印

在Python REPL中计算字符串时,将得到其
repr
。这是
'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'
。打印时,您将获得
Ааааааа

print(string.encode('utf-8'))

正如@Amadan所说,您只需要打印字符串

但是为什么打印字符串可以解决这个问题呢

答案是,如果您键入
string
+输入,这将导致显示对象的表示形式
string
;在运行print string(或Python3.x中的print(string))时,您将得到一个可读的字符串表示形式--
string

>>> converted = string.encode('utf8')
>>> converted
'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'
>>> print converted
Абакан
>>> print repr(converted)
'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'
>>> print str(converted)
Абакан
>>> 

进一步阅读:

您将看到字节字符串的
repr
,它不会试图显示实际字符。尝试打印它。你的示例JSON不是真正的JSON。如果这些是Python值,则在这些unicode字符串中有双编码的
\u
unicode转义。这真的是您拥有的还是您手工输入的?您的
string
示例值是一个合适的
unicode
对象,您可以直接打印(
print string
),编码值(
print string.encode('utf8')
)也是如此。Python交互式解释器响应的字符串表示法或用于显示字典或列表等容器内容的字符串表示法让您感到困惑。表示是ASCII安全调试值。这是。。。(傻)谢谢你。尽管如此,当我尝试将json保存为文件时,我还是遇到了另一个问题,我得到了
u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439'
如何将其转换为西里尔字母<代码>打开('file_to_save.txt','w')作为输出文件:json.dump(json_var,outfile)
u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439'
不是有效的json。(注意引号)。
u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439'
是有效的JSON。使用后一个值,
importjson;print(json.loads(x))
prints
字符串的
str
给出字符串本身
print(str(x))
=
print(x)
,而
print(repr(x))
与REPL中的
str(x)
几乎相同(因为
str(x)
将使用
repr
再次显示)。