Ruby on Rails使用HTTParty发送韩文URL的报错解决咨询
解决URL中发送韩文字符串的URI错误问题
这个问题我之前对接含非ASCII字符的API时也踩过一模一样的坑!URI规范要求所有字符必须是ASCII编码,像韩文这类非ASCII字符不能直接拼进URL里——单纯用.encode("utf-8")只是把字符串转成UTF-8字节流,并没有转换成URI要求的百分号编码格式,这就是你报错的核心原因。
给你两个靠谱的解决方案:
方案1:手动编码查询参数
用Ruby标准库的URI.encode_www_form_component方法专门处理URL查询参数的编码,它会自动把非ASCII字符转成符合规范的%XX格式:
# 先对韩文内容做URL编码 encoded_content = URI.encode_www_form_component(params[:content]) # 再拼进URL里发起请求 resp = HTTParty.get("http://sandbox.api.simsimi.com/request.p?key=e7501386-fca8-4723-b278-36755e917526&lc=ko&ft=1.0&text=#{encoded_content}")
方案2:用HTTParty的query参数自动编码
更优雅的方式是利用HTTParty自带的参数处理能力,把所有查询参数放在query选项里,它会自动帮你完成所有参数的URL编码,不用手动拼接URL,还能避免其他潜在的格式错误:
resp = HTTParty.get("http://sandbox.api.simsimi.com/request.p", query: { key: "e7501386-fca8-4723-b278-36755e917526", lc: "ko", ft: "1.0", text: params[:content] } )
补充说明:为什么之前的方法无效?
.encode("utf-8")只是将字符串转换成UTF-8编码的字节序列,但URI需要的是把这些字节序列转换成%XX的百分号编码形式(比如韩文"안녕"会被转成%EC%95%88%EB%85%95),URI.encode_www_form_component正好做的就是这件事,完全符合URL的RFC规范。
内容的提问来源于stack exchange,提问作者한승우
相关产品推荐
相关产品推荐

