Python请求模块,如何处理带有特殊字符的文件名

时间:2015-09-08 19:54:06

标签: python-requests

我在尝试将文件发布为" multipart / form-data"时遇到特殊字符问题。当我尝试发布带有特殊字符的文件时,帖子中缺少该文件。没有特殊字符我的脚本工作得很好。

我该如何处理文件名?

工作正常:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="wix.bootstrapper" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore">
      <section name="host" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" />
    </sectionGroup>
  </configSections>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <wix.bootstrapper>
    <host assemblyName="VerySimpleBurnApp">
      <supportedFramework version="v4.5" />
    </host>
  </wix.bootstrapper>
</configuration>

将空数据作为文件发布:

r = requests.post('http://localhost/upload.ws', files={'file': open('test.txt')}, data=param, auth=HTTPBasicAuth('user', 'pass'))

2 个答案:

答案 0 :(得分:0)

尝试将字符串转换为unicode,如下所示:

r = requests.post('http://localhost/upload.ws', files={'file': open(u'test_äöå.txt')}, data=param, auth=HTTPBasicAuth('user', 'pass'))

或者如果名称在变量中,请执行以下操作:

r = requests.post('http://localhost/upload.ws', files={'file': open(filename.decode('utf8'))}, data=param, auth=HTTPBasicAuth('user', 'pass'))

它不是请求库的问题,python默认情况下不会将字符串视为unicode,因此无法打开文件(它将其名称视为ascii字符)

答案 1 :(得分:0)

请求可能是从对象中错误地提取文件名。尝试将显式文件名作为unicode传递:

..., files={'file': (u'test_äöå.txt', open('test_äöå.txt'))}, ...