Skip to content

JS big5 轉 UTF-8 的另一個方法 - TextDecoder

發佈日期:

要在 javascript 將 Big5 編碼的資料轉為 UTF-8,比較常用的選擇是用 node-iconv 或是 iconv-lite。不過最近發現還有一個內建的 TextDecoder 可以用。

TextDecoder 是 WHATWG Encoding Living Standard 中定義的一個 API。在比較新版本的瀏覽器與 Node.js 都可以使用。

使用的方法很簡單,要將 Big5 資料轉為 UTF-8 可以這樣寫:

const decoder = new TextDecoder("big5");
const big5Text = new Uint8Array([0xa7, 0x41, 0xa6, 0x6e]);
const result = decoder.decode(big5Text);
// 結果:"你好"

要注意的是 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 編碼。