如何打开带有非UTF-8参数的URL

0 投票
3 回答
1456 浏览
提问于 2025-04-15 15:34

我在用Python的时候,需要把一些不是utf-8编码的数据(具体来说是shift-jis编码)通过网址的查询字符串传输。请问我应该怎么传输这些数据呢?是要把它们加上引号,还是要先转换成utf-8编码呢?

谢谢!

3 个回答

0

你说的“查询字符串”是指像 http:/{URL}?data=XYZ 这样的HTTP GET请求吗?

你需要把你拥有的数据通过 base64.b64encode 进行编码,使用 -_ 作为替代字符,这样可以确保在网址中是安全的。具体可以参考 这里

1

我不太明白unicode和这个有什么关系,因为查询字符串其实是一串字节。你可以使用urllib里的编码函数,把普通字符串转换成可以在查询字符串中使用的格式。

4

查询字符串参数是基于字节的。虽然在把国际资源标识符(IRI)转换成统一资源标识符(URI)时,通常会使用UTF-8编码,或者在处理非ASCII字符时也会用到,但其实没有规定你必须用这种编码来发送或接收自己的参数。

比如说,对于Shift-JIS编码(实际上通常是cp932,这是Windows对这种编码的扩展):

foo= u'\u65E5\u672C\u8A9E' # 日本語
url= 'http://www.example.jp/something?foo='+urllib.quote(foo.encode('cp932'))

在Python 3中,你可以直接在quote函数里处理这些编码:

foo= '\u65E5\u672C\u8A9E'
url= 'http://www.example.jp/something?foo='+urllib.parse.quote(foo, encoding= 'cp932')

撰写回答