2011-07-13 11 views
10

次のコード(ベンダー正規化済み)は、Firefox 8では「➀➁➂Test」と表示されますが、Google Chromeでは「Test」と表示されます。ファイルシステムAPIを使用して一時ファイルシステムにファイルを書き込んでいないと、Google Chromeでブロブのエンコードを保持する方法はありますか?Google ChromeでBLOBエンコーディングを指定する

var bb = new BlobBuilder; 
bb.append("➀➁➂ Test"); 
var b = bb.getBlob("text/plain;charset=UTF-8"); 
var url = URL.createObjectURL(b); 
open(url); 
+0

はあなたが頭のタグでエンコーディングを宣言したことがありますか? http://tlt.its.psu.edu/suggestions/international/web/tips/declare.html – NoBugs

+0

結果のドキュメントにメタ要素を追加すると、事実の後に何も行われず、<?xmlを追加することはできませんencoding = ...?>テキスト/プレーン文書への処理命令は、text/html型の非XML文書を生成するときに処理します。可能であれば、すでにロードされた後のドキュメントのエンコーディングに影響するかどうかは疑問です。 –

+0

Firefox 8?それは夜間のビルですか?あなたは安定したFirefox 5でそれを試しましたか? – NoBugs

答えて

0

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

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

10

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

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

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

PS:IEはwindow.openデータにできないようです:-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",""); 
+0

Chrome 34では、これはデフォルトのエンコード(設定/フォント/エンコードのカスタマイズ)が「Unicode(UTF-8)」に設定されている場合にのみ機能します。 – kolypto

+0

@kolyptoエンコードオプションを追加して最後のコード例を修正しました。 – panzi

+0

@kolyptoしかし、私にとっては、このオプションを指定しなくてもうまくいきました。LinuxとLinuxのシステムエンコーディングを使用しています。 UTF-8だから、Chrome *はこれらのプロパティを無視してシステムのエンコーディングを使用するだけで、私にとってはUTF-8になります(UTF-8を使用しないOSそれはとにかくシステムのエンコーディングです。) – panzi

関連する問題