在python中使用特殊字符Popen调用

时间:2017-11-16 19:23:35

标签: python subprocess popen

我正在开发一个python 2.7应用程序,用于将文件上传到2007 Sharepoint。服务器正在OpenSUSE计算机上运行。我现在这样做的方法是使用子进程'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
  3. 中选择文件的目标网址
  4. 构建类似于“ curl --ntlm -u usr:pwd --upload-file filelocalPath fileSharepointUrl -k ”的curl命令
  5. 使用convert_to_utf_8函数(查看附图)
  6. 使用Popen发出请求(如__execute_curl_cmd_and_wait函数)

1 个答案:

答案 0 :(得分:0)

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

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

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

感谢您的回复。