9

扱っているいくつかの URL で非 ASCII 文字を URL エスケープ (パーセント エンコード) しようとしています。これらの URL から画像やサウンド クリップなどのリソースを読み込むフラッシュ アプリケーションを使用しています。ファイル名には次のように非ASCII文字を含めることができるため、文字 日本語.jpg をutf-8でエンコードしてから、Unicodeバイトをパーセントエスケープして、次のようにエスケープします。

%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg

これらのファイル名は、Internet Explorer 以外のブラウザーでアプリを実行すると正常に機能します。Firefox、Safari、および Chrome を試しました。しかし、IE でアプリを起動し (6 と 8 の両方を試しました)、サウンド クリップをロードしようとすると、次 Error #2044: Unhandled ioErrorのようになり、URL が次のように壊れています。

æ¥æ¬èª.jpg

これを修正する方法について何か考えはありますか?これは、ローカル ファイル システムの URL を使用して Flash アプリをテストするだけです。file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpgまた、Internet Explorer が次のようなファイルを見つけることができないことにも気付きました:

C:\日本語.jpg

編集

私の問題は、次の ActionScript コード フラグメントで発生した問題と同じだと思います。

import flash.display.Loader;
import flash.net.URLRequest;
...
var ldr:Loader;
var req:URLRequest = new URLRequest("日本語.jpg");
ldr = new Loader();
ldr.load(req);

文字列の使用は日本語.jpgIE で機能しますが、文字列の使用%E6%97%A5%E6%9C%AC%E8%AA%9E.jpgは他のブラウザーで機能します。私が必要としているのは、すべてのブラウザーで機能する単一のフォームです。エンコーディングを試み、%uhttp リクエスト ヘッダーを に設定しContent-Type: text/html; charset=utf-8ましたが、パーセント エスケープまたはエスケープされていない形式のどちらでもうまくいきませんでした。

4

6 に答える 6

1

Unicodeエスケープシーケンスを使用しないのはなぜですか?これをHTMLWebページの本文に貼り付けて、意味を確認してください。

   <script type="text/javascript">
      var fileName = "日本語.jpg";
      document.write(escape(fileName));
   </script>

%u65E5%u672C%u8A9E.jpgを取得します。

于 2009-11-30T21:23:29.173 に答える
1

誤って解析される原因となるURIの部分のみをエンコードしてみてください。たとえば、&、?、およびスペースをエンコードします。他のすべてはそのままにしておくと、魅力のように機能するはずです。

それでも問題が発生する場合は、httpヘッダーでcontent-typeをutfに設定する必要がある場合があります。Content-typeのようなもの:text / html; charset=UTF-8。

于 2009-11-29T06:51:15.053 に答える
1

IE は HTTP URL に UTF-8 を使用しますが、ファイル URL についてはよくわかりません (約 10 年前に IE チームの一員として動作をテストしましたが)。HTML で URL を使用している場合は、実際には文字列リテラル (ページのエンコーディングが UTF-8 の場合) または数値文字参照 (&#dddd;) を試すことをお勧めします。IE は通常、文字を適切なエンコーディングに変換します。これは、HTTP の場合は UTF-8、ローカル ファイル システムのやり取りの場合は UTF-16 です。

実際には、HTML パーサーではなく、URL エスケープが必要なのは HTTP です。

于 2009-11-27T21:35:05.373 に答える
1

file:// プロトコルは OS の地域設定に依存します。システム設定が中国語ではなく英語に設定されている場合、IE にこれを行わせることはできません。

于 2009-12-07T02:19:59.567 に答える
1

申し訳ありませんが、解決策はありませんが、ここで何が起こっているのかについて、少なくともいくつかの情報が得られるかもしれません。(おそらく、あなたはすでにこれを理解していますが、別の読者が解決策を見つけるのに役立つかもしれません. -- エスケープされたエンティティは、UTF-8 文字 (Firefox などが解釈するため) または ASCII 文字 (IE が解釈するため) を表すことを意図していますか? 意図したデコード戦略を強制する方法はわかりません。

質問: Unicode を URL にそのまま残して、それらをまったくエスケープしないと、どのような悪いことが起こるでしょうか? 私はあまり経験がありませんが、URL で Unicode をエスケープする必要がある時代は過ぎ去ったことをどこかで読んだことを覚えていると思いました。そこは間違ってるかも…

于 2009-11-25T13:53:26.200 に答える
1

私がテストしたことから、IE はエンコードされたファイルの URL を処理しないことに気付きましたが、通常の http URL を処理するので、それが問題になる可能性があります。それらをどのようにロードしているかはわかりませんが、その問題を確認する必要があります。

于 2009-12-02T10:00:54.160 に答える