通过AJAX POST请求发送iso-8859-1编码?

3
首先,这是一个用户脚本,我无法更改服务器端的编码方式。
我的问题是,当使用encodeURIComponent()对POST参数进行编码(稍后通过xhr.setRequestHeader发送),字符被编码为utf-8,但服务器需要接收iso-8859-1数据。是否有一种替代encodeURIComponent()的方法可以用iso-8859-1进行编码?
为了确保您理解,这里是一个示例:
网站上的经典表单将“é”发送如下:yournewmessage:%E9
通过xhr.send('yournewmessage='+encodeURIComponent('é'))进行的Ajax发送如下:yournewmessage:%E9%80%80
服务器需要前者。感谢任何能帮助我的人。

1
不确定这是否有多大意义。URI按规范使用UTF8,如RFC2396中所定义的那样。 - Polynomial
@Polynomial 或许这并没有太多意义,但有时确实需要,而且网络浏览器知道如何做到。 - Alexandre Dieulot
1
我能想到的唯一解决方案是将字符串中的每个字节(而不是字符)转换为十六进制表示,并上传。这里有一个很好的答案,关于如何从JS字符串获取编码不可知的字节数组:https://dev59.com/UnM_5IYBdhLWcg3ww2EQ - Polynomial
1个回答

0

所以,我已经解决了这个问题。我所做的是在 utf-8 和 iso-8859-1 之间搜索等价物,我找到的是在 utf-8 和 cp1252 (Windows-1252) 之间的等价物,因此需要进行两次转换:utf-8 to cp1252 和 cp1252 to iso-8859-1(这两者有很多相似之处)。

http://pastebin.com/jTDqR2PQ

代码丑陋,注释用的是法语,解决方案也不够优雅,但我感到很不好意思看到这个问题一直没有得到答案,而我实际上已经找到了一个可行的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接