XMLHttpRequest.发送非UTF-8编码的数据,是否不可能完成任务?

4
我需要使用XMLHttpRequest(POST方法)将数据发送到服务器。
条件和限制:
1.服务器始终假定字符编码为windows-1251。
2.我不能改变服务器端的任何内容。该服务器不是我的。
3.我的代码必须在FF,Chrome和IE8上工作:-(我尝试使用sendAsBinary,但没有成功。
据我所见,XMLHttpRequest在发送之前总是将数据修改为UTF-8,因此问题无法解决。 对吗?

1
在此页面上有一个注释:https://developer.mozilla.org/en/XMLHttpRequest注意:当发送 nsIDOMDocument 时,Firefox 版本 3 之前的版本始终使用 UTF-8 编码发送请求;Firefox 3 使用 body.xmlEncoding 指定的编码正确地发送文档,如果未指定编码,则使用 UTF-8。 - ak.
1个回答

1

你说“XMLHttpRequest在发送之前总是将数据修改为UTF-8编码。”

那是错误的!!! XMLHttpRequest在发送之前应该进行编码,编码由文档自身定义。

对于HTML5,您可以使用<meta charset="YOUR-ENCODING-HERE">。 对于HTML或XHTML,您必须使用 <meta http-equiv="Content-Type" content="text/html; charset=YOUR-ENCODING-HERE-WITHOUT-QUOTES">。 对于XML,您可以使用<?xml version="1.0" encoding="YOUR-ENCODING-HERE"?>

然后,在XMLHttpRequest.send()之前,您必须使用XMLHttpRequest.setRequestHeader("Content-type","SOME-OTHER-DECLARATION; charset=YOUR-ENCODING-HERE-WITHOUT-QUOTES");

考虑到上述所有内容,无论您的服务器默认采用什么编码方式,它都将使用请求建议的字符集(如果支持)来解码URI。

还有另一种方法。

我不知道你的服务器端使用了什么编程语言。对于Java,您可以使用以下代码:str 是服务器获取到的字符串,newStr = new String(str.getBytes("SERVER-ASSUMED-CHAR-ENCODING"), "YOUR-HTML-ENCODING");

在你的情况下,应该是这样:newStr = new String(str.getBytes("windows-1251"), "UTF-8");。 新的newStr应该是可读的数据。


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