当前位置: 首页 > 面试题库 >

在Python3中评估字符串中的UTF-8文字转义序列

长孙嘉容
2023-03-14
问题内容

我有一个形式的字符串:

s = '\\xe2\\x99\\xac'

我想通过评估转义序列将其转换为字符♬。但是,我尝试过的所有操作都会导致错误或打印出垃圾。如何强制Python将转义序列转换为文字unicode字符?

我在其他地方阅读过的内容表明,以下代码行应该可以实现我想要的功能,但是会导致UnicodeEncodeError。

print(bytes(s, 'utf-8').decode('unicode-escape'))

我还尝试了以下方法,其结果相同:

import codecs
print(codecs.getdecoder('unicode_escape')(s)[0])

这两种方法都会产生字符串’âx9999’,随后打印将无法处理该字符串。

以防万一,请从UTF-8编码的文件中读取字符串,并在处理后最终将其输出到其他UTF-8编码的文件中。


问题答案:

...decode('unicode-escape')会给你字符串'\xe2\x99\xac'

>>> s = '\\xe2\\x99\\xac'
>>> s.encode().decode('unicode-escape')
'â\x99¬'
>>> _ == '\xe2\x99\xac'
True

您需要对其进行解码。但要对其进行解码,请先使用latin1(或iso-8859-1)对其进行编码以保留字节。

>>> s = '\\xe2\\x99\\xac'
>>> s.encode().decode('unicode-escape').encode('latin1').decode('utf-8')
'♬'


 类似资料:
  • 在C语言中,我用以下形式指定了一个Unicode字符: 然而,我找不到关于它是如何存储的任何细节。是UTF-8、16、32吗?是否有指定UTF-8编码的符号,或者我必须用十六进制写每个字节?

  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 问题内容: 如何在Swift中将字符串转换为Unicode(UTF-8)字符串? 在Objective中,我可以这样写: 如何在Swift中做类似的事情? 问题答案: 使用此代码, 希望对您有所帮助

  • 问题内容: 我试图在这段代码中使用常量而不是字符串文字: 经常出现在代码中,最好是引用一些变量。您知道我可以在JDK中找到这样的变量吗? 顺便说一句,顺便说一句,这样的常数是不好的设计:公共静态文字…不是数据复制的解决方案 问题答案: 在Java 1.7+中,java.nio.charset.StandardCharsets定义用于包括的常量。 对于Android:minSdk 19

  • 问题内容: 如果JSP中存在某些值,则需要隐藏一个元素 值存储在列表中,所以我尝试了: 但是,它不起作用。 如何评估列表是否包含JSTL中的值,列表和值是字符串。 问题答案: 可悲的是,我认为JSTL除了支持所有元素的迭代来解决这个问题外,不支持任何其他功能。过去,我在核心标签库中使用过forEach方法: 运行之后,如果myList包含myValue,则$ {contains}将等于“ true

  • 我有一个从第三方应用程序收到的字符串,我希望在我的Windows界面上使用C#以任何语言正确显示它。 由于编码不正确,我的字符串中有一段在西班牙语中如下所示: AcciÃn 然而它应该看起来像这样: 阿克松 根据这个问题的答案:如何知道C#中的字符串编码,我接收到的编码应该已经在UTF-8中出现了,但它是在编码时读取的。默认值(可能是ANSI?)。 我试图将这个字符串转换成真正的UTF-8,但问题