2012-02-19 104 views
6

所以作爲一個例子,當我使用FileReader API從File讀取π字符(\u03C0)時,當我使用預期的FileReader.readAsText(blob)讀取它時,我得到了pi字符。但是當我使用FileReader.readAsBinaryString(blob)時,我得到結果\xcf\x80,而這看起來與pi字符沒有任何可見的相關性。這是怎麼回事? (這可能有事情做與UTF-8/16編碼的方式......)使用FileReader在readAsBinaryString和readAsText之間的區別

+2

'CF80'是π的UTF-8編碼。 – deceze 2012-02-19 02:15:00

+0

......哦,你是對的......謝謝! – gengkev 2012-02-19 04:34:40

+0

......這可能太明顯了,但如果您願意,您可以將其作爲答案發布。 – gengkev 2012-02-19 04:37:18

回答

2

哦,如果這就是你需要的... :)

CF80是UTF-8編碼π。

12

FileReader.readAsText將文件的編碼考慮在內。特別是,由於您使用UTF-8編碼的文件,每個字符可能有多個字節。將其作爲文本讀取,UTF-8將按照原樣讀取,並獲得字符串。另一方面,

FileReader.readAsBinaryString確實如它所說的那樣。它逐字節讀取文件。它無法識別多字節字符,這對於二進制文件(除了文本文件之外基本上是任何事情)都是好消息。由於π是一個雙字節字符,因此可以在字符串中得到兩個單獨的字節。

這種差異可以在許多地方看到。特別是在編碼丟失時,您看到é等字符顯示爲Ã ©。

+0

謝謝...所以當我嘗試將\ xA2附加到BlobBuilder時,它變成了\ xC2 \ xA2,因爲這就是UTF-8編碼的內容,但是我怎樣才能得到\ xA2? (這是一個單字節字符) – gengkev 2012-02-20 17:33:15

+0

哦,我想我必須使用ArrayBuffer然後 – gengkev 2012-02-20 17:37:01