我最近刚刚安装了Winamp Song Requester,它是一个 Winamp 网络歌曲请求插件,内置了最小的 HTTP CGI 服务器。
该插件的作用是它运行一个 Web 服务器,提供一个带有一些特殊变量的 html 页面,它会根据请求(播放列表、请求队列、歌曲剩余时间等)替换为实际数据。
我认为这是学习一些 jQuery 的一个有趣且好的项目,所以我开始连接我自己的 js 代码来替换、修复和 ajaxify 来自插件的服务网站,但我现在遇到了字符编码的问题。
在页面上,您可以获得播放列表中所有歌曲的链接。当您单击其中一个链接时,我连接了我自己的 jQuery 单击功能。因此,当您请求一首歌曲时,我不会重新加载整个页面$.get($(this).attr('href', function(response) {... code ...})
,然后我使用 replaceWith 将当前队列替换为新生成的队列,并即时添加您的请求。我做同样的事情来显示/更新当前正在播放和搜索,以便在后台获取所有内容,然后动态替换为添加一些动画。
所有 jQuery/Ajax 都很好用,但我遇到的最大问题是字符集和队列/播放列表中的歌曲名称。名称中的特殊字符(åäöé 等)根本不起作用。
该插件以 iso-8859-1/latin1 输出所有内容,并且我在标记中的元标记告诉浏览器此页面是 latin1。在浏览器中正常的页面刷新时,效果很好,特殊字符正常显示。但是当我使用 jQuery 并动态$.get()
替换代码块时,特殊字符仅显示为?。
我认为问题在于如果没有标头另有说明,jQuery 默认认为$.get()
响应是 UTF-8。该插件根本没有为编码/字符集设置任何标头,因为我无法控制所有后端以及设置了哪些标头,所以我无法更改它。
我从插件的响应中得到的唯一标题是:
服务器:WinampServer
连接:关闭
内容类型:text/html
我希望你能理解我的问题。我有一个页面,我完全无法控制后端,我需要处理的只是生成的 HTML。我无法在回复中更改或添加标题。我需要告诉 jQuery 响应实际上是 latin1 而不是 UTF-8,这样特殊字符的编码就不会中断。我已经在 jQuerys ajaxSetup 中尝试了 scriptCharset: 'iso-8859-1' ,但这仅适用于 script/json 类型,并且我正在使用 HTML 响应。
知道这是否可能或您可以考虑的任何其他解决方法吗?