Python 3.6,utf-8到unicode转换,带有双反斜杠的字符串

标签 python unicode utf-8 python-unicode

关于 utf-8 > unicode 转换有很多问题,但我仍然没有找到我的问题的答案。

让我们有这样的字符串:

a = "Je-li pro za\\xc5\\x99azov\\xc3\\xa1n\\xc3\\xad"

Python 3.6 像 Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad 一样理解此字符串。我需要将这个类似 utf-8 的字符串转换为 unicode 表示形式。最终结果应该是Je-li pro zařazování

使用 a.decode("utf-8") 我得到 AttributeError: 'str' object has no attribute 'decode',因为 Python 意味着该对象已经已解码。

如果我首先使用 bytes(a, "utf-8") 将其转换为字节,反斜杠只会加倍,.decode("utf-8") 再次将其返回到我当前的 a

如何从此a获取unicode字符串Je-li pro zařazování

最佳答案

您必须编码/解码 4 次才能获得所需的结果:

print(
  "Je-li pro za\\xc5\\x99azov\\xc3\\xa1n\\xc3\\xad"

  # actually any encoding support printable ASCII would work, for example utf-8
  .encode('ascii')

  # unescape the string
  # source: https://stackoverflow.com/a/1885197
  .decode('unicode-escape')

  # latin-1 also works, see https://stackoverflow.com/q/7048745
  .encode('iso-8859-1')

  # finally
  .decode('utf-8')
)

Try it online!

此外,如果可以的话,请考虑告诉您的目标程序(数据源)提供不同的输出格式(例如字节数组或 Base64 编码)。

不安全但更短的方法:

st = "Je-li pro za\\xc5\\x99azov\\xc3\\xa1n\\xc3\\xad"
print(eval("b'"+st+"'").decode('utf-8'))

Try it online!

ast.literal_eval,但可能不值得在这里使用。

关于Python 3.6,utf-8到unicode转换,带有双反斜杠的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49756071/

相关文章:

python - Maya 中的 Unicode

python - 标记数据时出错。 C错误Pandas读取xlsx文件

python - 如何将单行数据框连接到更大的数据框?当前获取 "TypeError: Expected tuple, got str"

python - 如何将unicode字符串拆分为列表

java - Java 的 String.getBytes ("ISO-8859-1") 是否返回字符串中每个 2 字节字符的第一个字节?

javascript - 将 PHP 数组转换为 JSON 时动态转义撇号

javascript - 检查 textarea 中的值是否为 ascii

Python 2.7、Appengine 数据存储和 Unicode

python - 创建一个函数,该函数接受以字符串形式给出的方程并计算它

python - 如何将 pyvista PolyData 写入流或内存缓冲区?