要在 javascript 將 Big5 編碼的資料轉為 UTF-8,比較常用的選擇是用 node-iconv 或是 iconv-lite。不過最近發現還有一個內建的 TextDecoder 可以用。
TextDecoder 是 WHATWG Encoding Living Standard 中定義的一個 API。在比較新版本的瀏覽器與 Node.js 都可以使用。
使用的方法很簡單,要將 Big5 資料轉為 UTF-8 可以這樣寫:
要注意的是 decode()
的參數只能是 ArrayBuffer、TypedArray 或 DataView 物件的其中一個。像是上面的範例就是一個 Uint8Array(一種 TypedArray)。
限制
支援版本
各個瀏覽器對於 TextDecoder 的支援可以參考 Can I use,照連結裡的資訊,主流的瀏覽器除了 IE 外都有支援。
Node.js 則是在 v8.3.0 加入。
只能單向轉換
有 TextDecoder 當然也會有 TextEncoder,但是 TextEncoder 只能將 javascript 字串轉換成 UTF-8 編碼的 Uint8Array。也就是說非 UTF-8 編碼的資料用這種方法只能單向轉換成 javascript 字串,無法將 javascript 字串轉成非 UTF-8 編碼。