18

次のコード(ベンダー正規化)は完全に正常に機能し、Firefox 8では「➀➁➂テスト」と表示されますが、GoogleChromeでは「➀âžâž、テスト」と表示されます。ファイルシステムAPIを使用して一時ファイルシステムにファイルを書き込む以外に、Google ChromeでBLOBのエンコードを保持する方法はありますか?

var b = new Blob(["➀➁➂ Test"], {type: "text/plain;charset=UTF-8"});
var url = URL.createObjectURL(b);
open(url);
4

3 に答える 3

12

Gecko (Firefox)、WebKit (Safari、Chrome)、および Opera は、ベース 64 で文字列をエンコードするための非標準btoa関数をサポートしています。UTF-8 としてエンコードされた文字列を含むベース 64 文字列を取得するには、encodeURIComponent-unescapeトリックを使用する必要があります。 . encodeURIComponent文字列を UTF-8 URL としてエンコードしますが、それぞれを単一の文字としてunescapeデコードします。必要なエンコードのバイナリ文字列が必要です。%xxbtoa

var base64 = btoa(unescape(encodeURIComponent(data)));
window.open("data:text/plain;charset=UTF-8;base64,"+base64,"UTF-8 Text");

もちろんこれは IE では動作しませんが、IE 10 ではBlob-API がサポートされると思います。エンコーディングをどのように処理するかは誰にもわかりません。

window.openPS: IE はdata:-urls を実行できないようで、URL の長さの制限がばかげているようです。

PPS:これはChromeで機能します:

var b = new Blob(["➀➁➂ Test"],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"});
var url = URL.createObjectURL(b);
window.open(url,"_blank","");
于 2012-04-09T03:31:01.080 に答える
1

問題は、Chrome の新しいタブのデフォルトのページ エンコーディングです。新しいウィンドウが開いたら ( の後window.open(url))、Chrome メニューから [View] > [Encoding] > [Unicode] を選択します。これにより、表示されるテキストが「➀âžâž‚ テスト」から「➀➁➂ テスト」に変更されました。

デフォルトのエンコーディングに関係なく、新しいウィンドウで BLOB を開くことができるソリューションが必要な場合は、iframe 内のドキュメントが独自のエンコーディングを明示的に指定していない場合、親ドキュメントのエンコーディングを継承するという事実に依存できます。そのため、ヘッダー付きの空白の HTML ドキュメントを含むウィンドウを開き、blob URL に設定されContent-Type:text/html; charset=utf-8た属性を使用して iframe を本文に追加できます。src

于 2011-08-29T16:07:32.597 に答える