Javascript 如何使用ajax发布带有非UTF8 url编码字符串的表单数据

Javascript 如何使用ajax发布带有非UTF8 url编码字符串的表单数据,javascript,firefox,character-encoding,greasemonkey,Javascript,Firefox,Character Encoding,Greasemonkey,我正在编写一个greasemonkey脚本,以便在一个网页中添加一些功能(因此很明显,我无法更改服务器端的代码) 这是一个非常古老的网站,只接收GBK编码的字符串。例如,当前网页中的表单有一个用值填充的文本输入字段”中"(\u4e2d“,%E4%B8%AD”在UTF-8字节流中,%D6%D0在GBK字节流中),当用户单击“提交”按钮时,浏览器将自动将表单序列化为application/x-www-form-urlencoded文本,然后将其发布到服务器。因为该网页声称是用GBK编码的,”中在应用

我正在编写一个greasemonkey脚本,以便在一个网页中添加一些功能(因此很明显,我无法更改服务器端的代码)

这是一个非常古老的网站,只接收GBK编码的字符串。例如,当前网页中的表单有一个用值填充的文本输入字段”中"(\u4e2d“,%E4%B8%AD”在UTF-8字节流中,%D6%D0在GBK字节流中),当用户单击“提交”按钮时,浏览器将自动将表单序列化为application/x-www-form-urlencoded文本,然后将其发布到服务器。因为该网页声称是用GBK编码的,”中在应用程序/x-www-form-urlencoded文本中自动编码为“%D6D0%”,然后服务器端将使用GBK编码对其进行解码并获得正确的结果

现在我改用ajax将表单提交到服务器(大多数情况下是30~40次),我使用JQuery的serialize()方法将表单序列化为application/x-www-form-urlencoded text,然后将其发布。问题是,JQuery的serialize方法最终使用encodeURIComponent对表单的所有值进行编码,此时,”中无论当前网页的字符集是否为GBK,都将其编码为“%E4%B8%AD”。服务器端仍使用GBK对其进行解码,然后失败

我在谷歌上搜索了很多,encodeURIComponent总是将字符串编码为utf-8流,而在javascript语言中,没有任何实用程序函数可以实现我想要的功能,也就是像浏览器自动完成的那样获取序列化表单数据

有什么想法吗?谢谢


写一个firefox插件并使用c/c++代码实现一个XPCOM来完成从javascript字符串到GBK格式url编码字符串的转换怎么样?

你应该可以自己用javascript编码。如果不起作用,应该非常接近。@BrockAdams在启动这个线程之前我已经尝试过了。那代码是什么所有剂量将“%E4%B8%AD”转换为中,或相反。我需要的是转换中或“%E4%B8%AD”到“%D6%D0”。这家伙认为“%E4%B8%AD”和中“可以称为UTF8和GBK之间的转换,最可能的原因是他缺乏javascript字符串和字符集的基本概念知识。要将unicode字符码转换为GBK字符码,我认为除了使用大映射表之外没有其他方法。我想ajax无法做到这一点,所以我使用iframe作为表单的“目标”“为了实现我的目标。