Python 3 utf8值解码为字符串

时间:2016-06-28 19:46:47

标签: python python-3.x utf-8

您好我正在使用python3,我想将utf8值更改为字符串(解码)

这是我现在的代码

s1 = '\u54c7'
print(chr(ord(s1)))  # print 哇

如果输入是一个char但是如何更改字符串呢?

s2 = '\u300c\u54c7\u54c8\u54c8!!\u300d'
print(chr(ord(s2)))   # Error! I want print "「哇哈哈!!」"

由于

编辑:============================================= ===================

大家好,我更新了问题

如果我得到的字符串是“s3”,如下所示,我使用替换来改变格式

但是打印“s3”没有显示“哇哈哈!!”

如果我用\ u54c7 \ u54c8 \ u54c8 !!'启动了s4并打印s4

它看起来是正确的,所以如何修复s3?

s3 = '哇哈哈!!'
s3 = s3.replace("&#x","\\u").replace(";","") # s3 = \u54c7\u54c8\u54c8!!
s4 = '\u54c7\u54c8\u54c8!!'
print(s3)  # \u54c7\u54c8\u54c8!!
print(s4)  # 哇哈哈!!

2 个答案:

答案 0 :(得分:4)

如果您实际上正在使用python3,则无需执行任何操作。你可以打印字符串。此外,您只需将文字复制并粘贴到python字符串中即可。

'「哇哈哈!!」' == '\u300c\u54c7\u54c8\u54c8!!\u300d'

关于更新的问题,区别在于逃避。如果键入字符串文字,则某些字符序列将更改为无法轻松键入或显示的字符。字符串不会存储为您看到的一系列字符,而是存储为由“a”,“;”和“\ 300”等字符创建的值列表。请注意,所有这些都具有len为1,因为它们都是一个字符。

要实际转换这些值,您可以使用eval,Iron Fist提供的答案,或找到转换您拥有的字符串的库。我会建议最后一个,因为围绕这些事情的规则可能很复杂,很少被简单的替换所覆盖。我不认识逃逸的特殊模式,所以我不能推荐任何东西,抱歉。

答案 1 :(得分:2)

关于您的s3字符串,我觉得这更像是HTML格式的HTML实体或文字,因此请使用正确的html.parser

>>> s3 = '哇哈哈!!'
>>> from html.parser import HTMLParser
>>> 
>>> p = HTMLParser()
>>> 
>>> p.unescape(s3)
'哇哈哈!!'

或者更简单地使用html.unescape

>>> import html
>>> 
>>> html.unescape(s3)
'哇哈哈!!'

引用html.unescape上的Python文档:

  

html.unescape(s)

     

将字符串s中的所有命名和数字字符引用(例如>,>,& x3e;)转换为相应的unicode字符。
  ...