在進行數(shù)據(jù)傳輸或者存儲中,我們常常需要對二進制數(shù)據(jù)進行編碼和解碼。Base64 是一種常用的編碼方式,它可以將任意二進制數(shù)據(jù)轉(zhuǎn)換成一組可打印的ASCII字符。
在 JavaScript 中,我們可以使用btoa()
和atob()
方法進行 Base64 編碼和解碼。而在傳輸數(shù)據(jù)時,我們經(jīng)常需要將數(shù)據(jù)轉(zhuǎn)換成 JSON 格式,這樣便于傳輸和解析。但是,在將 Base64 編碼的數(shù)據(jù)轉(zhuǎn)換成 JSON 格式時,有可能會出現(xiàn)報錯。
// Base64 編碼的數(shù)據(jù) const base64Str = "SGVsbG8sIHdvcmxkIQ=="; // 將 Base64 編碼的數(shù)據(jù)轉(zhuǎn)換成 Object 類型 const obj = { message: atob(base64Str) }; // 將 Object 類型的數(shù)據(jù)轉(zhuǎn)換成 JSON 格式 const jsonStr = JSON.stringify(obj);
上面的代碼,將一個 Base64 編碼的字符串轉(zhuǎn)換成了 Object 類型,并將其封裝成了一個 JSON 格式的字符串。但是,如果 Base64 編碼的字符串中包含了非 ASCII 字符,則上述代碼會出現(xiàn)報錯。
這是因為 JSON 字符串中只能包含 ASCII 字符,而 Base64 編碼的字符串中可能包含非 ASCII 字符。所以,在轉(zhuǎn)換成 JSON 格式前,需要將 Base64 編碼的字符串先轉(zhuǎn)換成 URI 編碼。
const base64Str = "5ZKS56Wl5a2Q5Y62"; const uriStr = encodeURIComponent(atob(base64Str)); const obj = { message: uriStr }; const jsonStr = JSON.stringify(obj);
上面的代碼,將 Base64 編碼的字符串先轉(zhuǎn)換成 URI 編碼,再進行 JSON 格式化,就可以避免報錯了。
上一篇ext json日期帶t
下一篇ext js解析json