【问题标题】:Unicode and subprocess.PopenUnicode 和 subprocess.Popen
【发布时间】:2014-04-23 22:09:02
【问题描述】:

我在 sqlite3 数据库中有一个字段,其中包含如下字符串:

title = "Friedrich_N\u00FCrnberg"

我在一个变量中读取了这个字符串,我想将它的 unicode 版本传递给 subprocess.Popen 调用。

我通过 Popen 调用的软件需要接收以下内容作为输入:

Friedrich_Nürnberg

而不是这个:

Friedrich_N\u00FCrnberg

否则它的计算是徒劳的。

这是调用代码:

subprocess.Popen([command, title], stdout=subprocess.PIPE)

如何修改?

非常感谢。

PS。如果我手动尝试添加 u"" 它可以工作,但我不能使用该语法,因为我没有明确说明每个变量的文本内容。

【问题讨论】:

    标签: python-2.7 unicode subprocess


    【解决方案1】:

    这称为 Unicode 转义序列。您想要的字符称为编码字符。

    这是在 Python shell 中解码 unicode 转义序列的示例。

    >>> title = "Friedrich_N\u00FCrnberg"
    >>> character = title.decode("unicode-escape")
    >>> character
    u'Friedrich_N\xfcrnberg'
    >>> print character
    Friedrich_Nürnberg
    

    你可以试试:

    title = title.decode("unicode-escape")
    subprocess.Popen([command, title], stdout=subprocess.PIPE)
    

    我写了另一个答案,我认为它很好地解释了这一点。 Decoding Unicode in Python

    【讨论】:

    • @michele:如果您需要.decode('unicode-escape'),那么您的数据链中有问题。修复生成字符串的上游代码,以生成已知编码的 Unicode 字符串或字节串。
    • @J.F.Sebastian 或许发帖者无法控制上游数据。
    • @icedtrees:我们不知道。这意味着第一个选项是修复上游。如果我们不能修复上游。我们不能
    • @J.F.Sebastian 我建议您在第一条评论中指定这一点。 “您的数据链中有问题”非常具有误导性。通常,软件限制会迫使人们将 unicode 存储在转义序列中,这样说来并没有什么“错误”。
    • @icedtrees:是的。这是错误的。如果交换在内存中,那么它应该使用 Unicode 字符串。如果它存储在外部(磁盘、网络),则可以使用 json 之类的东西(它甚至使用类似的 Unicode 转义)。你不应该在你的代码中看到unicode-escape
    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 2019-01-20
    • 2011-06-28
    • 2020-04-25
    • 2013-03-09
    • 2018-06-08
    • 2013-08-20
    相关资源
    最近更新 更多