【问题标题】:Using special characters in python Popen call在 python Popen 调用中使用特殊字符
【发布时间】:2017-11-16 19:23:35
【问题描述】:

我正在开发一个 python 2.7 应用程序,该应用程序旨在将文件上传到 2007 Sharepoint。服务器在 OpenSUSE 机器上运行。我现在这样做的方式是使用 subprocess' Popen 来执行 curl 命令。但是,当文件名包含特殊字符(例如,'á'、'õ'、'ç')时,python 会引发 UnicodeEncodeError。

我可以通过强制转换来解决 Unicode 错误
对于命令字符串,从 str 到 Unicode,但随后文件以错误的格式名称转到 Sharepoint(例如,Manutenção 变为 Manuten'c~ao)。下图描述了我正在使用的函数的实现:functions used

有人知道我应该如何进行吗?

P.S.:我更愿意继续使用 curl 命令来执行请求,但我们对其他解决方案持开放态度

编辑: 没有尝试 pycurl,但我会看看它。运行服务器的 Linux dist 是 3.11.10。 执行流程如下:

  1. 从 utf-8 数据库中读取文件名和路径
  2. 在 Sharepoint 中选择文件的目标 url
  3. 构建类似于“curl --ntlm -u usr:pwd --upload-file filelocalPath fileSharepointUrl -k”的 curl 命令
  4. 使用 convert_to_utf_8 函数(查看附图)
  5. 使用 Popen 发出请求(如在 __execute_curl_cmd_and_wait 函数中)

【问题讨论】:

  • python 应用程序在哪里运行(*nix 或 Windows)?您是否尝试使用 pycurl ?尽量根据mvce提供更多信息
  • 不,我没试过,我去看看。我刚刚编辑了我的帖子,希望对您有所帮助...
  • Manutenção 转换为 Manuten'c~ao 听起来不像 curl 或 Python 会做的事情。您确定您的 Sharepoint 服务器没有破坏名称吗? curl 发送的确切标题是什么(通过curl -vv ... 找到)?

标签: python subprocess popen


【解决方案1】:

好的,伙计们,我发现了问题

由于我在 Linux 机器上运行我的代码,因此 Popen 命令以 utf-8 编码并以这种方式发送到 Sharepoint。但是,Sharepoint 2007 使用的编码似乎是一些 latin-1 或 windows-1252。

在 Windows 机器上运行相同的代码并使用一堆其他编码对该行进行编码后,我得出了这个结论。正如预期的那样,只要编码是 windows-1252 或 latin-1(由 win cmd 识别),上传就会正常。

感谢您的回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2023-04-04
    • 2022-12-01
    相关资源
    最近更新 更多