最近、最小限の HTTP CGI サーバーが組み込まれた Winamp Web ソング リクエスター プラグインである Winamp ソング リクエスターをインストールしました。
プラグインが行うことは、Web サーバーを実行し、要求に応じて実際のデータ (プレイリスト、要求キュー、曲の残り時間など) に置き換えるいくつかの特別な変数を含む html ページを提供することです。
これは jQuery を学ぶための楽しくて良いプロジェクトだと思ったので、独自の js コードを接続して、プラグインから提供された Web サイトを置き換え、修正し、ajaxify し始めましたが、文字エンコーディングの問題に遭遇しました。
このページには、プレイリスト内のすべての曲へのリンクが表示されます。リンクの 1 つをクリックすると、独自の jQuery クリック関数を接続しました。そのため、曲をリクエストするときにページ全体をリロードする代わりに、$.get($(this).attr('href', function(response) {... code ...})
replaceWith を使用して、現在のキューを新しく生成されたキューに置き換え、リクエストをその場で追加します。現在再生中および検索時に同じことを表示/更新して、すべてがバックグラウンドでフェッチされ、追加されたアニメーションでその場で置き換えられるようにします。
すべての jQuery/Ajax は問題なく動作しますが、大きな問題は文字セットとキュー/プレイリストの曲名にあります。名前の特殊文字 (åäöé など) はまったく機能しません。
プラグインは iso-8859-1/latin1 にすべてを出力し、マークアップのメタ タグは、このページが latin1 であることをブラウザーに伝えます。ブラウザでの通常のページ更新では、これはうまく機能し、特殊文字は通常どおり表示されます。しかし、jQuery を使用$.get()
してその場でコード ブロックを置き換えると、特殊文字は ? としてのみ表示されます。
$.get()
問題は、jQuery のデフォルトが、ヘッダーに別の指示がない場合、応答が UTF-8であると信じていることにあると思います。プラグインは、encoding/charset のヘッダーをまったく設定しません。バックエンドとどのヘッダーが設定されるかをまったく制御できないため、これを変更することはできません。
プラグインからの応答で得られる唯一のヘッダーは次のとおりです。
サーバー: WinampServer
接続: 閉じる
コンテンツ タイプ: text/html
私の問題を理解していただければ幸いです。バックエンドをまったく制御できず、処理する必要があるのは生成された HTML だけであるページがあります。応答のヘッダーを変更または追加できません。特殊文字のエンコーディングが壊れないように、応答が実際には UTF-8 ではなく latin1 であることを jQuery に伝える必要があります。jQuerys ajaxSetup で scriptCharset: 'iso-8859-1' を試しましたが、それはタイプ script/json でのみ機能し、HTML 応答で作業しています。
これが可能かどうか、または考えられる他の回避策はありますか?