使用API 网关时出现Unicode转换问题

问题描述 投票:-2回答:1

以下URL按预期工作,并返回“ null”。

https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https://mr.wikipedia.org/s/4jp4

但是在同一页面上,使用unicode字符串而不是ascii字符串会引发错误:

"errorMessage": "'ascii' codec can't encode characters in position 10-20: ordinal not in range(128)", "errorType": "UnicodeEncodeError"

在将字符串传递给API网关时如何编码Unicode字符?

https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https://mr.wikipedia.org/wiki/%E0%A4%95%E0%A4%BF%E0%A4%B6%E0%A5%8B%E0%A4%B0%E0%A4%BE%E0%A4%B5%E0%A4%B8%E0%A5%8D%E0%A4%A5%E0%A4%BE


我正在使用以下书签生成上面提到的URL ...

javascript:(function(){location.href='https://z3nt6lcj40.execute-api.us-east-1.amazonaws.com/mycall?url='+encodeURIComponent(location.href);})();
python-unicode
1个回答
2
投票

您的lambda函数中有此行取消了URL的引用

url1 = urllib.parse.unquote(url)

来自

'https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https://mr.wikipedia.org/wiki/%E0%A4%95%E0%A4%BF%E0%A4%B6%E0%A5%8B%E0%A4%B0%E0%A4%BE%E0%A4%B5%E0%A4%B8%E0%A5%8D%E0%A4%A5%E0%A4%BE'

to

'https://zga2tn1wgd.execute-api.us-east-1.amazonaws.com/mycall?url=https://mr.wikipedia.org/wiki/किशोरावस्था'

上述结果的非US-ASCII部分必须在执行请求之前进行编码。这在查询组件中。

建议使用separate URI into its components when encoding以免更改其语义。

在向URL发出请求之前,还有其他事情要做。

url1 = urllib.parse.unquote(url)
urlparts = urllib.parse.urlparse(url1)
querypart = urllib.parse.parse_qs(urlparts.query)
querypart_enc = urllib.parse.urlencode(querypart)

# Rebuild URL with escaped query part
url1 = urllib.parse.urlunparse((
     urlparts.scheme, urlparts.netloc, 
     urlparts.path, urlparts.params,
     querypart_enc, urlparts.fragment
))
© www.soinside.com 2019 - 2024. All rights reserved.