【问题标题】:Python 3: is there any need of using unicode_escape encoding?Python 3:是否需要使用 unicode_escape 编码?
【发布时间】:2019-04-21 02:01:52
【问题描述】:

This link 列出了一些 python 特定的编码。

其中一种编码是“unicode_escape”。

我只是想弄清楚,真的需要这种特殊编码吗?

>>> l = r'C:\Users\userx\toot'
>>> l
'C:\\Users\\userx\\toot'
>>> l.encode('unicode_escape').decode()
'C:\\\\Users\\\\userx\\\\toot'

如果您在上面看到,作为 unicode 对象的 'l' 已经处理了反斜杠的转义。将其转换为“unicode_escape”编码会增加一组转义反斜杠,这对我来说没有任何意义。

问题:

  1. 真的需要“unicode_escape”编码吗?
  2. 为什么“unicode_escape”在上面多加了一组反斜杠?

【问题讨论】:

  • 如果你print(l) 你会看到在字符串的实际内容中,反斜杠没有被转义。字符串的repr 版本转义了反斜杠,以便向开发人员明确显示它。
  • 您为什么认为unicode_escape() 用于您的用例?仅仅因为某些东西存在并不意味着它对您有意义或相关。
  • @CharlesDuffy 我正在编写一个 python 脚本,它以 windows 样式路径作为参数。因此,该脚本可以正常工作。我只是想确保在任何情况下我必须使用“unicode_escape”转换 arg 输入?
  • unicode_escape() 的目的是生成可以直接替换为纯 ASCII Python 源文件的内容。你没有这样做,所以你不需要它。
  • @CharlesDuffy 你能给我举个例子吗?

标签: python python-3.x unicode python-unicode


【解决方案1】:

引用the document you linked:

编码适合作为 ASCII 编码 Python 源代码中的 Unicode 文字的内容,但引号不会被转义。从 Latin-1 源代码解码。请注意,Python 源代码实际上默认使用 UTF-8。

因此,print(l.encode('unicode_escape').decode()) 所做的事情几乎完全等同于 print(repr(l)),只是它不在字符串的外部添加引号并在字符串的内部转义引号。

当您离开 print() 时,REPL 会执行默认的 repr(),因此您会两次转义反斜杠 - 与运行 >>> repr(l) 时发生的情况完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2012-10-09
    • 2018-10-15
    相关资源
    最近更新 更多