jQuery $ .get()没有设置标头时的回复字符集?

我刚刚安装了Winamp Song Requester,它是一个Winamp网络歌曲请求者插件,内置最小的HTTP CGI服务器。

该插件的作用是运行一个Web服务器,为一个html页面提供一些特殊的变量,它取代了请求的实际数据(播放列表,请求队列,歌曲中剩余的时间等)。

我认为这是一个有趣而且很好的项目来学习一些jQuery所以我开始连接我自己的js代码来替换,修复和ajaxify服务的网站从插件,但我现在遇到了字符编码的问题。

在页面上,您可以获得播放列表中所有歌曲的链接。 当你点击其中一个链接时,我连接了我自己的jQuery点击function。 因此,当你请求一首歌时我没有重新加载整个页面,而是执行$ .get($(this).attr(’href’,function(response){… code …})然后我使用replaceWith来使用新生成的队列替换当前队列,同时添加您的请求。我做同样的事情来显示/更新当前正在播放和搜索,以便在后台获取所有内容,然后在动画中添加一些动画。

所有的jQuery / Ajax都很棒,但我遇到的最大问题是charset和queue / playlist中的歌曲名称。 名称中的特殊字符(åäöé等)根本不起作用。

该插件输出iso-8859-1 / latin1中的所有内容,标记中的meta标签告诉浏览器该页面为latin1。 在浏览器中的正常页面刷新中,这很好用,并且特殊字符显示为正常。 但是当我使用jQuery和$ .get()来动态替换代码块时,特殊字符只显示为?

我认为问题在于,如果没有标题说明,jQuery默认认为$ .get()响应是UTF-8。 该插件根本没有为encoding / charset设置任何标头,因为我无法控制所有后端以及设置了哪些标头我无法改变这一点。

我在插件的响应中获得的唯一标头是:

服务器:WinampServer
连接:关闭
内容类型:text / html

我希望你理解我的问题。 我有一个页面,我无法控制后端,我必须使用的是生成的HTML。 我无法在响应中更改或添加标头。 我需要告诉jQuery响应实际上是在latin1而不是UTF-8,以便特殊字符的编码不会中断。 我在jQuerys ajaxSetup中尝试过scriptCharset:’iso-8859-1’,但这只适用于脚本/ json类型,我正在使用HTML响应。

是否有可能或任何其他可以考虑的解决方法?

编辑 :好吧我认为这是有效的(至少它在我的测试环境中工作,请参阅先前尝试的修订)

$.ajaxSetup({ 'beforeSend' : function(xhr) { xhr.overrideMimeType('text/html; charset=UTF-8'); }, }); $('#stuff').load('/yourresource.file'); // your ajax load 

我所拥有的是UTF-8设置的主文件和ISO-8859-1设置的数据文件。 没有上面的代码,我得到了一堆垃圾,测试字符串åäöé正如预期的那样。 使用上面的代码,它加载åäöé正确编码。

首先,如果你使用了更通用的$ .ajax()函数会更好。

根据文档,有scriptCharset选项,但它仅适用于某些数据类型。 还指出,仅当呼叫页面的编码不同时才需要这样做。

这只是要指出虽然在基于Gecko的浏览器(Firefox,…)中可以使用overrideMimeType()方法,但它不在IE中(至少<= 7),似乎没有解决方法。 (我不知道其他浏览器的可用性。)