首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助将转义序列添加到列表中的所有元素,这些元素稍后将用于unicode。

需要帮助将转义序列添加到列表中的所有元素,这些元素稍后将用于unicode。
EN

Stack Overflow用户
提问于 2017-05-24 05:30:18
回答 3查看 68关注 0票数 0
代码语言:javascript
复制
>>> n
['de', 'db', 'aa', 'dC', 'be', 'Ad', 'Da', 'a7', 'Cb', 'Cc', 'Ed', 'D7', 'CA', 'Da', 'db', 'aa', 'bD', 'db', '7d', 'Ad', 'c4', 'DA', 'Ba', 'bD', 'cc', 'DC', 'da', 'dd', '2d', 'CD', 'bA', 'dA', 'EC', 'Cb', 'dC', 'aC', 'Dd', 'ec', 'CD', 'Ae', 'aC', 'dE', 'BE', 'CE', 'db', 'AC', 'EC', 'cb', 'DE']

我有上面的单子。我想在每个元素之前添加转义字符'\x‘。我可以将其追加为'\x',但稍后我希望将元素连接起来以创建unicode字符,如果使用'\x‘,它将无法工作。

请建议

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-24 05:34:32

您可以也应该使用binascii.unhexlify

代码语言:javascript
复制
from binascii import unhexlify

n = ['de', 'db', 'aa', 'dC', 'be', 'Ad', 'Da', 'a7', 'Cb', 'Cc', 'Ed', 'D7',
     'CA', 'Da', 'db', 'aa', 'bD', 'db', '7d', 'Ad', 'c4', 'DA', 'Ba', 'bD',
     'cc', 'DC', 'da', 'dd', '2d', 'CD', 'bA', 'dA', 'EC', 'Cb', 'dC', 'aC',
     'Dd', 'ec', 'CD', 'Ae', 'aC', 'dE', 'BE', 'CE', 'db', 'AC', 'EC', 'cb', 'DE']

print(repr(unhexlify(''.join(n))))

binascii.unhexlifyunhexlify('abcdef') # '\xab\xcd\xef'的示例用法

在您的示例中,十六进制数字存储在list中,因此您应该首先使用str.join连接这些数字。并简单地将其传递给binascii.unhexlify

票数 2
EN

Stack Overflow用户

发布于 2017-05-24 05:37:24

在字符串域中,您不能轻松地做到这一点。幸运的是,使用chrint很简单

代码语言:javascript
复制
>>> n = ['de', 'db', 'aa', 'dC', 'be', 'Ad', 'Da', 'a7', 'Cb', 'Cc', 'Ed', 'D7', 'CA', 'Da', 'db', 'aa', 'bD', 'db', '7d', 'Ad', 'c4', 'DA', 'Ba', 'bD', 'cc', 'DC', 'da', 'dd', '2d', 'CD', 'bA', 'dA', 'EC', 'Cb', 'dC', 'aC', 'Dd', 'ec', 'CD', 'Ae', 'aC', 'dE', 'BE', 'CE', 'db', 'AC', 'EC', 'cb', 'DE']
>>> [chr(int(k, 16)) for k in n]
['Þ', 'Û', 'ª', 'Ü', '¾', '\xad', 'Ú', '§', 'Ë', 'Ì', 'í', '×', 'Ê', 'Ú', 'Û', 'ª', '½', 'Û', '}', '\xad', 'Ä', 'Ú', 'º', '½', 'Ì', 'Ü', 'Ú', 'Ý', '-', 'Í', 'º', 'Ú', 'ì', 'Ë', 'Ü', '¬', 'Ý', 'ì', 'Í', '®', '¬', 'Þ', '¾', 'Î', 'Û', '¬', 'ì', 'Ë', 'Þ']
票数 2
EN

Stack Overflow用户

发布于 2017-05-24 05:40:50

提供了一个替代hallazzang的答案:我们可以使用literal_eval将unicode的字符串表示形式安全地转换为unicode字符。例如,'\\xde'的计算结果是“instance”。

代码语言:javascript
复制
>>>from ast import literal_eval
>>>
>>>[ast.literal_eval("'\\x{}'".format(k)) for k in n]
['Þ', 'Û', 'ª', 'Ü', '¾', '\xad', 'Ú', '§', 'Ë', 'Ì', 'í', '×', 'Ê', 'Ú', 'Û', 'ª', '½', 'Û', '}', '\xad', 'Ä', 'Ú', 'º', '½', 'Ì', 'Ü', 'Ú', 'Ý', '-', 'Í', 'º', 'Ú', 'ì', 'Ë', 'Ü', '¬', 'Ý', 'ì', 'Í', '®', '¬', 'Þ', '¾', 'Î', 'Û', '¬', 'ì', 'Ë', 'Þ']

我指出,literal_evaleval的一个安全的替代方案。eval允许运行任意代码,而literal_eval只创建文本--比如int、string、list和dicts。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44149700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档