You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫POST请求日文参数编码问题求助

解决POST请求中日文参数的Shift_JIS编码问题

看起来你踩了一个常见的编码坑——直接把Shift_JIS编码后的字节传给requests的data参数,并没有达到服务器期望的格式。服务器需要的是经过URL百分号编码的Shift_JIS字节,而不是 raw 的字节流,这就是为什么你的请求不符合预期。

正确的处理流程

核心思路是两步走:先把日文字符串转成Shift_JIS编码的字节,再对这些字节做URL百分号编码(将每个字节转为%XX格式),最后组装成标准的表单格式发送。

方案一:简洁版(利用urllib.parse.urlencode自动处理)

urlencode支持指定编码格式,它会自动帮你完成「字符串转Shift_JIS字节 → URL百分号编码」的流程:

import requests
from urllib.parse import urlencode

# 假设你的参数是字典形式
params = {"area": "東京都"}

# 用Shift_JIS编码并自动完成URL百分号编码
encoded_data = urlencode(params, encoding="Shift_JIS")

# 必须在请求头指定字符集,让服务器知道用Shift_JIS解析
headers = {
    "Content-Type": "application/x-www-form-urlencoded; charset=Shift_JIS",
    # 这里添加你需要的其他请求头,比如User-Agent等
}

# 发送POST请求
response = requests.post(self.url, data=encoded_data, headers=headers)

方案二:手动控制每一步(适合需要自定义处理的场景)

如果你想更清晰地控制编码过程,可以拆分步骤:

import requests
from urllib.parse import quote_from_bytes

def encode_shiftjis_param(value):
    # 第一步:把日文字符串转成Shift_JIS字节
    shiftjis_bytes = value.encode("Shift_JIS")
    # 第二步:对字节做URL百分号编码
    return quote_from_bytes(shiftjis_bytes)

# 处理参数
params = {"area": "千代田区"}
encoded_params = {k: encode_shiftjis_param(v) for k, v in params.items()}

# 组装成表单字符串
encoded_data = "&".join([f"{k}={v}" for k, v in encoded_params.items()])

# 同样需要指定Content-Type charset
headers = {
    "Content-Type": "application/x-www-form-urlencoded; charset=Shift_JIS",
    # 其他请求头...
}

response = requests.post(self.url, data=encoded_data, headers=headers)

为什么你的原方法不对?

你之前的代码data=self.param.encode(encoding='Shift_JIS')存在两个问题:

  1. 如果self.param是字符串,直接编码后得到的是Shift_JIS字节流,但服务器期望的是key=value的表单格式,且value是经过URL编码的,raw字节流无法被正确解析。
  2. 如果self.param是字典,字典本身没有encode方法,会直接报错——推测你可能是把参数拼接成字符串后再编码,但这样依然缺少URL百分号编码的步骤,导致服务器收到的参数格式错误。

用上面的方案测试,输入「東京都」会得到area=%93%8C%8B%9E%93s,输入「千代田区」会得到area=%90%E7%91%E3%93c%8B%E6,完全符合你给出的正确示例。

内容的提问来源于stack exchange,提问作者Vũ Minh Vương

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:23:20