当前位置: 首页 > 知识库问答 >
问题:

修复了由(某些)转义反斜杠破坏的 Unicode 字符串

闻人宇定
2023-03-14

我在看这个问题:python3用单反斜杠代替双反斜杠[duplicate]

并筛选出对类似问题的回答:Python 将 \ 替换为 \ ,为什么 Python 的原始字符串文本不能以单个反斜杠结尾?,如何在python中取消scapeunicode转义字符串?

当我意识到没有一个答案真正解决这个问题时。假设我有一个损坏的unicode字符串,它包含转义反斜杠和转义字符:

my_str = '\\xa5\\xc0\\xe6aK\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'

当我打印它时,一些字符评估:

print(my_str)
\xa5\xc0\xe6aKù\x80\xb1\xc8*☺↕$\xfbp▲(4\xd6{;Z

我可以像这样手动修复:

my_str = repr(my_str)
my_str
"'\\\\xa5\\\\xc0\\\\xe6aKù\\\\x80\\\\xb1\\\\xc8*\\x01\\x12$\\\\xfbp\\x1e(4\\\\xd6{;Z'"
my_str = my_str.replace('\\\\','\\')
print(my_str)
'\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'

但此时,我必须手动复制打印结果并粘贴到变量中,以完成修复:

my_str = '\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'
print(my_str)
¥ÀæaKù±È*☺↕$ûp▲(4Ö{;Z

这个不复制粘贴怎么弄

共有2个答案

皇甫喜
2023-03-14

我已经提到ast。literal_eval在接受答案的评论中。但我觉得我应该在这里包括一个代码片段:

蟒蛇中的反向重现函数

from ast import literal_eval

my_str = '\\xa5\\xc0\\xe6aK\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'
my_str = repr(my_str)
my_str = my_str.replace('\\\\','\\')
print(literal_eval(my_str))

结果(Python 3):

¥ÀæaKù±È*☺↕$ûp▲(4Ö{;Z
盖博简
2023-03-14

去掉单引号,编码以获得字节,然后使用“unicode-转义”进行解码:

# original code
my_str = '\\xa5\\xc0\\xe6aK\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'
my_str = repr(my_str)
my_str = my_str.replace('\\\\','\\')
print(my_str)
# encode/decode stuff
print(my_str.strip("'").encode().decode("unicode-escape"))

印刷品:

'\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'
¥ÀæaKù±È*$ûp(4Ö{;Z
 类似资料:
  • 我想使用方法发送POST请求,但是我的JSON有一些国际字符,比如surunn。 不幸的是,我的WebAPI在从格式解码这个字符串时遇到了一些问题:。 使用时,我的API可以很好地处理非转义字符串和unicode转义字符串:。 我尝试了此操作,但在将转换为unicode后,转义了: 我有两个反斜杠字符串: 我试图用一个反斜杠替换两个反斜杠,但没有成功: 我该如何替换它们?

  • 问题内容: 假设我有一个字符串,它是另一个字符串的反斜杠转义版本。在Python中,有没有一种简便的方法可以对字符串进行转义?例如,我可以这样做: 但是,这涉及将(可能不受信任的)字符串传递给eval(),这是安全隐患。标准库中是否有一个函数可以接收一个字符串并生成一个不涉及安全性的字符串? 问题答案:

  • 问题内容: 我需要在路径字符串中替换为,但是以下代码失败。 有什么有用的建议吗? 问题答案: 使用函数filepath.ToSlash将操作系统路径分隔符替换为路径中的“ /”。 在Windows上,函数返回。在其他操作系统上,该函数按原样返回path参数。

  • 问题内容: 假设我有一个字符串,它是另一个字符串的反斜杠转义版本。在Python中,有没有一种简便的方法可以对字符串进行转义?例如,我可以这样做: 但是,这涉及将(可能不受信任的)字符串传递给eval(),这是安全隐患。标准库中是否有一个函数可以接收一个字符串并生成一个不涉及安全性的字符串? 问题答案:

  • 我写了一个小函数,将Windows路径“转换”为OSX路径,并在Finder中打开它。该函数与bash完美配合,但与zsh(我使用的是oh-my-zsh)不配合。 问题是,它会解析特定的反斜杠组合,例如:、、、

  • 问题内容: 谁能告诉我在Java中如何使用正斜杠转义字符。我知道反斜杠是\ \,但是我尝试了\ /和/ /却没有运气! 这是我的代码: 提前致谢! 问题答案: 您既不需要以Java语言或正则表达式来转义正斜杠。 还要注意这样的块: 更紧凑和可读地写为: 因此,对于您而言,我相信您的方法应类似于: 请注意,这不是测试有效日期的一种非常好的方法-可能也应该尝试将其解析 为 日期,或者将其解析 为 日期