TextEncoder, TextDecoder 轉換

JavaScript TextEncoder 將字串轉換為位元組

JavaScript TextEncoder 將字串 String 轉換成 UTF-8Unit8Array 位元組 Bytes, ArrayBuffer。預設使用 UTF-8 編碼。
TextEncoder.encoding 只讀 DOMString 使用的編碼算法的名稱。只會返回 "utf-8"。JavaScript 內建的全域物件提供 encode 方法,可以將一個字串轉換為一個 Uint8Array 物件,也就是 8 位元無號整數的陣列。TextEncoder 方法預設使用 UTF-8 編碼,也是目前最常見的字元編碼方式,可以將字串轉換為位元組陣列,運用於加密、壓縮和二進位資料的處理。

let strExample = "字串轉換";
let textEncoder = new TextEncoder();
let enResult = textEncoder.encode(strExample);
console.log(enResult);

Uint8Array(12) [ 229,173,151,228,184,178,232,189,137,230,143,155 ]



TextDecoder 將位元組轉換為字串

TextDecoder 接口文本解碼器,將 Unit8Array (0 to 255) 位元組 Bytes 轉換成 UTF-8 的 String 字串。
預設使用 UTF-8 編碼。可選擇其他編碼,一個 TextDecoder 構造解碼器只支持一種特定文本編碼,例如 utf-8、utf-16le、big5、windows-1251、iso-8859-2、iso-2022-jp、shift-jis 等等。

let textDecoder = new TextDecoder();
console.log(textDecoder.encoding); // utf-8 預設值
let textDecoder = new TextDecoder("windows-1251");
console.log(textDecoder.encoding); // windows-1251
let textDecoder = new TextDecoder();
let textBytes = [229,173,151,228,184,178,232,189,137,230,143,155];
let uint8array = new Uint8Array(textBytes);
let deResult = textDecoder.decode(uint8array);
console.log(deResult);

字串轉換



Uint16Array 使用 Unicode (UTF-16)

JavaScript TextDecoder 使用 utf-16le 編碼,使用 charCodeAt() 取得字串上每一個字的 Unicode (UTF-16) 編碼,
對應 Uint16Array (0 to 65535) ArrayBuffers 陣列與群集。

let stringCodes = [];
let strExample = "字串轉換";
for (let i = 0; i < strExample.length; i++) {
  stringCodes.push(strExample.charCodeAt(i));
}
console.log(stringCodes);

Array(4) [ 23383, 20018, 36681, 25563 ]

let textDecoder = new TextDecoder("utf-16le");
let textBytes = [23383, 20018, 36681, 25563];
let uint16array = new Uint16Array(textBytes);
let deResult = textDecoder.decode(uint16array);
console.log(deResult);

字串轉換

TextEncoder, TextDecoder UTF-8 轉換

使用 Alt + Click 可以清除欄位的內容。



ASP.NET Encoding 字元編碼

ASP.NET 使用 GetBytes() 將一組 UTF8 字元轉換成位元組序列的處理接口。使用 GetChars() 解碼是將編碼位元組序列轉換成一組 UTF8 字元的接口。支援編碼有 Unicode 字元值、字碼頁 65001、也可以透過屬性取得 Unicode 詳細查閱 .NET 編碼清單列出支援的編碼方式。這裡只嘗試對應 JavaScript 的結果是否相同。

GetBytes(String) 轉換成 Byte 位元組

Dim strExample As String = "字串轉換"
Dim toBytes() As Byte = Encoding.UTF8.GetBytes(strExample)
For i = 0 To toBytes.Length - 1
  Response.Write(toBytes(i) & ", ")
Next

229,173,151,228,184,178,232,189,137,230,143,155,


GetChars(Byte[], Int32, Int32) 將位元組轉換為 String 字串

Dim UTF8Decoder As Encoding = Encoding.GetEncoding("UTF-8")
Dim byteArray() As Byte = { 229,173,151,228,184,178,232,189,137,230,143,155 }
Dim deChars As Char() = UTF8Decoder.GetChars(byteArray, 0, byteArray.Length)
Response.Write(deChars)

字串轉換


GetCharCount() 解碼位元組序列所產生的「字元數量」

Dim charCount As UInteger = UTF8Decoder.GetCharCount(byteArray, 0, byteArray.Length)

4


使用 Convert.ToUInt16() 對應 Uint16Array (0 to 65535) ArrayBuffers 陣列與群集。

For Each Item In deChars
  Response.Write(Convert.ToUInt16(Item) & ", " )
Next Item

23383, 20018, 36681, 25563,

如果上述 For Each... Next 再加上 ChrW() 則又可以返回字元。

For Each Item In deChars
  Response.Write(ChrW(Convert.ToUInt16(Item)) & ", " )
Next Item




Encoding 字元編碼屬性

Dim enUnicode As Encoding = Encoding.Unicode
Dim enUnicode As Encoding = Encoding.GetEncoding("UTF-8")

EncodingName 取得目前編碼方式的文字描述 (Human-Readable) 是指人可以自然閱讀的數據描述。

enUnicode.EncodingName = Unicode (UTF-8)

HeaderName 取得可以與郵件代理程式標頭標籤一起使用的目前編碼方式名稱。

enUnicode.HeaderName = utf-8

WebName 若要取得目前的編碼方式,請取得向 Internet Assigned Numbers Authority (IANA) 註冊的名稱。

enUnicode.WebName = utf-8

IsBrowserSave 取得值,指出瀏覽器用戶端是否可以使用目前的編碼方式來儲存內容。

enUnicode.IsBrowserSave = True

IsBrowserDisplay 取得值,指出瀏覽器用戶端是否可以使用目前的編碼方式來顯示內容。

enUnicode.IsBrowserDisplay = True

IsSingleByte 取得值,指出目前的編碼方式是否使用單一位元組字碼指標。

enUnicode.IsSingleByte = False

WindowsCodePage 請取得最能符合目前編碼方式的 Windows 作業系統字碼頁。

enUnicode.WindowsCodePage = 1200

CodePage 取得目前 Encoding 的字碼頁識別項。

enUnicode.CodePage = 65001



CodePage 頁碼

頁碼是字元編碼的別名,取得編碼方式的字碼頁識別項。

CodePageNameIsBrowserDisplayIsBrowserSaveIsMailNewsDisplayIsMailNewsSaveIsSingleByteIsReadOnly
37IBM EBCDIC (美國-加拿大)FalseFalseFalseFalseTrueTrue
437OEM 美國FalseFalseFalseFalseTrueTrue
500IBM EBCDIC (國際)FalseFalseFalseFalseTrueTrue
708阿拉伯文 (ASMO 708)TrueTrueFalseFalseTrueTrue
720阿拉伯文 (DOS)TrueTrueFalseFalseTrueTrue
737希臘文 (DOS)FalseFalseFalseFalseTrueTrue
775波羅的海文 (DOS)FalseFalseFalseFalseTrueTrue
850西歐語系 (DOS)FalseFalseFalseFalseTrueTrue
852中歐語系 (DOS)TrueTrueFalseFalseTrueTrue
855OEM 斯拉夫文FalseFalseFalseFalseTrueTrue
857土耳其文 (DOS)FalseFalseFalseFalseTrueTrue
858OEM 多語系拉丁文 IFalseFalseFalseFalseTrueTrue
860葡萄牙文 (DOS)FalseFalseFalseFalseTrueTrue
861冰島文 (DOS)FalseFalseFalseFalseTrueTrue
862希伯來文 (DOS)TrueTrueFalseFalseTrueTrue
863加拿大法文 (DOS)FalseFalseFalseFalseTrueTrue
864阿拉伯文 (864)FalseFalseFalseFalseTrueTrue
865北歐字母 (DOS)FalseFalseFalseFalseTrueTrue
866斯拉夫文 (DOS)TrueTrueFalseFalseTrueTrue
869希臘文,現代 (DOS)FalseFalseFalseFalseTrueTrue
870IBM EBCDIC (多語系拉丁文 2)FalseFalseFalseFalseTrueTrue
874泰文 (Windows)TrueTrueTrueTrueTrueTrue
875IBM EBCDIC (希臘現代)FalseFalseFalseFalseTrueTrue
932日文 (Shift-JIS)TrueTrueTrueTrueFalseTrue
936簡體中文 (GB2312)TrueTrueTrueTrueFalseTrue
949韓文TrueTrueTrueTrueFalseTrue
950繁體中文 (Big5)TrueTrueTrueTrueFalseTrue
1026IBM EBCDIC (土耳其拉丁文 5)FalseFalseFalseFalseTrueTrue
1047IBM 拉丁文 1FalseFalseFalseFalseTrueTrue
1140IBM EBCDIC (美國-加拿大-歐洲)FalseFalseFalseFalseTrueTrue
1141IBM EBCDIC (德國-歐洲)FalseFalseFalseFalseTrueTrue
1142IBM EBCDIC (丹麥-挪威-歐洲)FalseFalseFalseFalseTrueTrue
1143IBM EBCDIC (芬蘭-瑞典-歐洲)FalseFalseFalseFalseTrueTrue
1144IBM EBCDIC (義大利-歐洲)FalseFalseFalseFalseTrueTrue
1145IBM EBCDIC (西班牙-歐洲)FalseFalseFalseFalseTrueTrue
1146IBM EBCDIC (英國-歐洲)FalseFalseFalseFalseTrueTrue
1147IBM EBCDIC (法國-歐洲)FalseFalseFalseFalseTrueTrue
1148IBM EBCDIC (國際-歐洲)FalseFalseFalseFalseTrueTrue
1149IBM EBCDIC (冰島-歐洲)FalseFalseFalseFalseTrueTrue
1200UnicodeFalseTrueFalseFalseFalseTrue
1201Unicode (位元組由大到小)FalseFalseFalseFalseFalseTrue
1250中歐語系 (Windows)TrueTrueTrueTrueTrueTrue
1251斯拉夫文 (Windows)TrueTrueTrueTrueTrueTrue
1252西歐語系 (Windows)TrueTrueTrueTrueTrueTrue
1253希臘文 (Windows)TrueTrueTrueTrueTrueTrue
1254土耳其文 (Windows)TrueTrueTrueTrueTrueTrue
1255希伯來文 (Windows)TrueTrueTrueTrueTrueTrue
1256阿拉伯文 (Windows)TrueTrueTrueTrueTrueTrue
1257波羅的海文 (Windows)TrueTrueTrueTrueTrueTrue
1258越南文 (Windows)TrueTrueTrueTrueTrueTrue
1361韓文 (Johab)FalseFalseFalseFalseFalseTrue
10000西歐語系 (Mac)FalseFalseFalseFalseTrueTrue
10001日文 (Mac)FalseFalseFalseFalseFalseTrue
10002繁體中文 (Mac)FalseFalseFalseFalseFalseTrue
10003韓文 (Mac)FalseFalseFalseFalseFalseTrue
10004阿拉伯文 (Mac)FalseFalseFalseFalseTrueTrue
10005希伯來文 (Mac)FalseFalseFalseFalseTrueTrue
10006希臘文 (Mac)FalseFalseFalseFalseTrueTrue
10007斯拉夫文 (Mac)FalseFalseFalseFalseTrueTrue
10008簡體中文 (Mac)FalseFalseFalseFalseFalseTrue
10010羅馬尼亞文 (Mac)FalseFalseFalseFalseTrueTrue
10017烏克蘭文 (Mac)FalseFalseFalseFalseTrueTrue
10021泰文 (Mac)FalseFalseFalseFalseTrueTrue
10029中歐語系 (Mac)FalseFalseFalseFalseTrueTrue
10079冰島文 (Mac)FalseFalseFalseFalseTrueTrue
10081土耳其文 (Mac)FalseFalseFalseFalseTrueTrue
10082克羅埃西亞文 (Mac)FalseFalseFalseFalseTrueTrue
12000Unicode (UTF-32)FalseFalseFalseFalseFalseTrue
12001Unicode (UTF-32 位元組由大到小)FalseFalseFalseFalseFalseTrue
20000繁體中文 (CNS)FalseFalseFalseFalseFalseTrue
20001TCA 台灣FalseFalseFalseFalseFalseTrue
20002繁體中文 (Eten)FalseFalseFalseFalseFalseTrue
20003IBM5550 台灣FalseFalseFalseFalseFalseTrue
20004TeleText 台灣FalseFalseFalseFalseFalseTrue
20005Wang 台灣FalseFalseFalseFalseFalseTrue
20105西歐語系 (IA5)FalseFalseFalseFalseTrueTrue
20106德文 (IA5)FalseFalseFalseFalseTrueTrue
20107瑞典文 (IA5)FalseFalseFalseFalseTrueTrue
20108挪威文 (IA5)FalseFalseFalseFalseTrueTrue
20127US-ASCIIFalseFalseTrueTrueTrueTrue
20261T.61FalseFalseFalseFalseFalseTrue
20269ISO-6937FalseFalseFalseFalseTrueTrue
20273IBM EBCDIC (德國)FalseFalseFalseFalseTrueTrue
20277IBM EBCDIC (丹麥-挪威)FalseFalseFalseFalseTrueTrue
20278IBM EBCDIC (芬蘭-瑞典)FalseFalseFalseFalseTrueTrue
20280IBM EBCDIC (義大利)FalseFalseFalseFalseTrueTrue
20284IBM EBCDIC (西班牙)FalseFalseFalseFalseTrueTrue
20285IBM EBCDIC (UK)FalseFalseFalseFalseTrueTrue
20290IBM EBCDIC (日文片假名)FalseFalseFalseFalseTrueTrue
20297IBM EBCDIC (法國)FalseFalseFalseFalseTrueTrue
20420IBM EBCDIC (阿拉伯文)FalseFalseFalseFalseTrueTrue
20423IBM EBCDIC (希臘文)FalseFalseFalseFalseTrueTrue
20424IBM EBCDIC (希伯來文)FalseFalseFalseFalseTrueTrue
20833IBM EBCDIC (韓文擴充)FalseFalseFalseFalseTrueTrue
20838IBM EBCDIC (泰國)FalseFalseFalseFalseTrueTrue
20866斯拉夫文 (KOI8-R)TrueTrueTrueTrueTrueTrue
20871IBM EBCDIC (冰島)FalseFalseFalseFalseTrueTrue
20880IBM EBCDIC (斯拉夫俄文)FalseFalseFalseFalseTrueTrue
20905IBM EBCDIC (土耳其)FalseFalseFalseFalseTrueTrue
20924IBM 拉丁文 1FalseFalseFalseFalseTrueTrue
20932日文 (JIS 0208-1990 和 0212-1990)FalseFalseFalseFalseFalseTrue
20936簡體中文 (GB2312-80)FalseFalseFalseFalseFalseTrue
20949韓文 WansungFalseFalseFalseFalseFalseTrue
21025IBM EBCDICFalseFalseFalseFalseTrueTrue
21866斯拉夫文 (KOI8-U)TrueTrueTrueTrueTrueTrue
28591西歐語系 (ISO)TrueTrueTrueTrueTrueTrue
28592中歐語系 (ISO)TrueTrueTrueTrueTrueTrue
28593拉丁文 3 (ISO)FalseFalseTrueTrueTrueTrue
28594波羅的海文 (ISO)TrueTrueTrueTrueTrueTrue
28595斯拉夫文 (ISO)TrueTrueTrueTrueTrueTrue
28596阿拉伯文 (ISO)TrueTrueTrueTrueTrueTrue
28597希臘文 (ISO)TrueTrueTrueTrueTrueTrue
28598希伯來文 (ISO-Visual)TrueTrueFalseFalseTrueTrue
28599土耳其文 (ISO)TrueTrueTrueTrueTrueTrue
28603愛沙尼亞文 (ISO)FalseFalseTrueTrueTrueTrue
28605拉丁文 9 (ISO)FalseTrueTrueTrueTrueTrue
29001歐洲FalseFalseFalseFalseTrueTrue
38598希伯來文 (ISO-Logical)TrueTrueTrueTrueTrueTrue
50220日文 (JIS)FalseFalseTrueTrueFalseTrue
50221日文 (JIS-Allow 1 byte Kana)FalseTrueTrueTrueFalseTrue
50222日文 (JIS-Allow 1 byte Kana - SO/SI)FalseFalseFalseFalseFalseTrue
50225韓文 (ISO)FalseFalseTrueFalseFalseTrue
50227簡體中文 (ISO-2022)FalseFalseFalseFalseFalseTrue
51932日文 (EUC)TrueTrueTrueTrueFalseTrue
51936簡體中文 (EUC)FalseFalseFalseFalseFalseTrue
51949韓文 (EUC)FalseFalseTrueTrueFalseTrue
52936簡體中文 (HZ)TrueTrueTrueTrueFalseTrue
54936簡體中文 (GB18030)TrueTrueTrueTrueFalseTrue
57002ISCII 梵文語系FalseFalseFalseFalseFalseTrue
57003ISCII 孟加拉文FalseFalseFalseFalseFalseTrue
57004ISCII 坦米爾文FalseFalseFalseFalseFalseTrue
57005ISCII 泰盧固文FalseFalseFalseFalseFalseTrue
57006ISCII 阿薩姆文FalseFalseFalseFalseFalseTrue
57007ISCII 歐利亞文FalseFalseFalseFalseFalseTrue
57008ISCII 坎那達文FalseFalseFalseFalseFalseTrue
57009ISCII 馬來亞拉姆文FalseFalseFalseFalseFalseTrue
57010ISCII 古吉拉特文FalseFalseFalseFalseFalseTrue
57011ISCII 旁遮普語FalseFalseFalseFalseFalseTrue
65000Unicode (UTF-7)FalseFalseTrueTrueFalseTrue
65001Unicode (UTF-8)TrueTrueTrueTrueFalseTrue