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