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