iconv-tiny 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,15 +11,24 @@
11
11
  [![ci](https://github.com/vip-delete/iconv-tiny/actions/workflows/ci.yaml/badge.svg)](https://github.com/vip-delete/iconv-tiny/actions/workflows/ci.yaml)
12
12
  [![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
13
13
 
14
- Pure JS ESM Encodings Set for Browser and NodeJS. Auto-Generated from http://www.unicode.org/Public/MAPPINGS.
14
+ Pure JS character encoding conversion as an ECMAScript Module (ESM). Auto-Generated from http://www.unicode.org/Public/MAPPINGS.
15
15
 
16
- **Features**
17
- 1. No dependencies.
18
- 2. Encoding mappings overrides. Can be used to display IBM PC memory-mapped symbols for 0-31 control codes.
19
- 3. DefaultChar override.
20
- 4. Native TextDecoder for supported encodings (ISO-8859-* and windows-125*)
21
- 5. Typescript friendly.
22
- 6. Tiny: ~400 bytes per encoding, ~24KB of full bundle.mjs, ~9KB in gzip.
16
+ ## About
17
+
18
+ [**iconv-tiny.mjs**](dist/iconv-tiny.mjs) is written from scratch and designed to address all issues and implement all features in the [**iconv-lite**](https://github.com/ashtuchkin/iconv-lite) backlog.
19
+ <br/>
20
+ It is an ES-module and should work in all modern browsers and NodeJS that supports ESM, `TextDecoder`, and `TextEncoder`.
21
+
22
+ ## Features
23
+
24
+ 1. Zero dependencies.
25
+ 1. Browser support **out-of-the-box**.
26
+ 1. Tree shaking and other ESM-related benefits.
27
+ 1. Table mappings and default characters overrides.
28
+ 1. Native `TextDecoder` for some encodings.
29
+ 1. `encodeInto(Uint8Array)` and `byteLength(string)`
30
+ 1. Typescript friendly.
31
+ 1. Tiny: 1 file, ~12KB in gzip.
23
32
 
24
33
  ## Installation
25
34
 
@@ -27,128 +36,152 @@ Pure JS ESM Encodings Set for Browser and NodeJS. Auto-Generated from http://www
27
36
  npm install iconv-tiny
28
37
  ```
29
38
 
30
- ```javascript
31
- import { IconvTiny } from "iconv-tiny";
32
- import { aliases } from "iconv-tiny/aliases";
33
- import * as encodings from "iconv-tiny/encodings";
39
+ or use CDN:
34
40
 
35
- const iconvTiny = new IconvTiny(encodings, aliases);
36
- const buf = iconvTiny.encode("Hello", "UTF-16");
37
- console.log(buf); // Uint8Array(10) [72, 0, 101, 0, 108, 0, 108, 0, 111, 0]
38
- const str = iconvTiny.decode(buf, "UTF-16");
39
- console.log(str); // Hello
41
+ ```html
42
+ <script type="importmap">
43
+ {
44
+ "imports": {
45
+ "iconv-tiny": "https://unpkg.com/iconv-tiny@1.2.0/dist/iconv-tiny.mjs"
46
+ }
47
+ }
48
+ </script>
40
49
  ```
41
50
 
42
- or directly import from CDN without installation:
51
+ ## Basic API
52
+
53
+ API is very close to **iconv-lite** API, see [iconv-tiny.d.mts](dist/iconv-tiny.d.mts).
54
+
43
55
  ```javascript
44
- import { IconvTiny, aliases, encodings } from "https://unpkg.com/iconv-tiny@1.1.0/dist/iconv-tiny.bundle.mjs";
56
+ import { IconvTiny, aliases, encodings, canonicalize } from "iconv-tiny";
57
+
58
+ // Create iconv
45
59
  const iconv = new IconvTiny(encodings, aliases);
46
- const buf = iconv.encode("Le malheur est notre plus grand maître.", "cp1252")
47
- ...
60
+
61
+ // Convert from an Uint8Array to a js string.
62
+ str = iconv.decode(new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0x6f]), "win1251");
63
+
64
+ // Convert from a js string to an Uint8Array.
65
+ buf = iconv.encode("Sample input string", "win1251"); // Uint8Array
66
+
67
+ // Check if encoding is supported
68
+ aliases.split(/,| /).map(canonicalize).includes(canonicalize("us-ascii"));
48
69
  ```
49
70
 
50
- or import encodings individually:
71
+ or import encodings individually to enable ESM bundlers to remove unused encodings and reduce the final bundle size.
72
+
51
73
  ```javascript
52
- import { CP1251 } from "https://unpkg.com/iconv-tiny@1.1.0/dist/iconv-tiny.bundle.mjs";
74
+ import { CP1251 } from "iconv-tiny";
75
+
53
76
  const cp1251 = CP1251.create();
54
77
  const buf = cp1251.encode("Век живи — век учись.");
55
78
  const str = cp1251.decode(buf);
56
- console.log(buf); // [ 194, 229, 234, 32, 230, 232, ... ]
57
- console.log(str); // Век живи — век учись.
58
79
  ```
59
80
 
60
- See more [examples](examples).
81
+ ## Streaming API
61
82
 
62
- ## Commands
83
+ ```javascript
84
+ import { UTF16LE } from "iconv-tiny";
63
85
 
64
- Build:
65
- ```
66
- npm run build
67
- ```
68
- Note: You need JDK 21 or higher installed to compile the source code using the Google Closure Compiler.
86
+ // Create encoding
87
+ const utf16 = UTF16LE.create();
69
88
 
70
- Run tests:
71
- ```
72
- npm run test
73
- ```
89
+ // Create decoder, it works like TextDecoder with {stream: true} option.
90
+ const decoder = utf16.newDecoder();
74
91
 
75
- Run Coverage:
76
- ```
77
- npm run coverage
78
- ```
92
+ // Decode a fragment
93
+ const part = decoder.decode(new Uint8Array([0x3d, 0xd8, 0x0a]));
79
94
 
80
- Start UI:
81
- ```
82
- npm run dev
95
+ // Decode the next fragment
96
+ const str = decoder.decode(new Uint8Array([0xde])); // 😊
97
+
98
+ // Finish stream decoding
99
+ const tail = decoder.decode();
83
100
  ```
84
101
 
102
+ See more [examples](examples).
103
+
85
104
  ## Supported encodings:
86
105
 
87
106
  1. **ISO-8859**: 1,2,3,4,5,6,7,8,9,10,11,13,14,15,16
88
- 2. **EBCDIC**: Cp037, Cp500, Cp875, Cp1026
89
- 3. **DOS**: Cp437, Cp737, Cp775, Cp850, Cp852, Cp855, Cp857, Cp860, Cp861, Cp862, Cp863, Cp864, Cp865, Cp866, Cp869, Cp874
90
- 2. **WINDOWS**: Cp1250, Cp1251, Cp1252, Cp1253, Cp1254, Cp1255, Cp1256, Cp1257, Cp1258
91
- 3. **MAC**: CYRILLIC, GREEK, ICELAND, LATIN2, ROMAN, TURKISH
92
- 4. **MISC**: ATARIST, Cp424, CP856, Cp1006, KOI8-R, KOI8-U, KZ1048, NEXTSTEP
93
- 5. **OTHER**: US-ASCII
94
- 6. **UNICODE**: UTF-8, UTF-16, UTF-32
107
+ 1. **EBCDIC**: Cp037, Cp500, Cp875, Cp1026
108
+ 1. **DOS**: Cp437, Cp737, Cp775, Cp850, Cp852, Cp855, Cp857, Cp860, Cp861, Cp862, Cp863, Cp864, Cp865, Cp866, Cp869, Cp874
109
+ 1. **WINDOWS**: Cp1250, Cp1251, Cp1252, Cp1253, Cp1254, Cp1255, Cp1256, Cp1257, Cp1258
110
+ 1. **MAC**: CYRILLIC, GREEK, ICELAND, LATIN2, ROMAN, TURKISH
111
+ 1. **MISC**: ATARIST, Cp424, CP856, Cp1006, KOI8-R, KOI8-U, KZ1048, NEXTSTEP
112
+ 1. **OTHER**: US-ASCII
113
+ 1. **UNICODE**: UTF-8, UTF-16, UTF-32
114
+
115
+ All encodings are generated automatically from http://www.unicode.org/Public/MAPPINGS with a few additional mappings for **CP875** (0xE1 -> 0x20AF, 0xEC -> 0x037A, 0xFC -> 0x20AC) and **CP1255** (0xCA -> 0x05BA), see [mappings](scripts/mappings/)
95
116
 
96
117
  **iconv-tiny** output is identical to **iconv-lite** output, see [tests/regression.test.mjs](tests/regression.test.mjs).
97
118
 
119
+ ## Encoding/decoding speed
120
+
121
+ Comparison with iconv-lite module (Core i7-7500U CPU @ 2.7GHz, Node v24.2.0). Note: your results may vary, so please always check on your hardware.
122
+
123
+ ```
124
+ operation iconv-lite@0.6.3 iconv-tiny@1.2.0
125
+ ------------------------------------------------------
126
+ encode('win1251') ~598 Mb/s ~622 Mb/s
127
+ decode('win1251') ~218 Mb/s ~263 Mb/s
128
+ ```
129
+
130
+ **iconv-lite** is NodeJS oriented and use specific API like `Buffer` and native NodeJS encodings.
131
+ <br/>
132
+ **iconv-tiny** is Browser oriented and use `Uint8Array` and native `TextDecoder`, and `TextEncoder`. Also it supports `encodeInto(Uint8Array)` and `byteLength(string)`.
133
+
98
134
  ## BOM Handling
135
+
99
136
  1. UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE:
100
137
  - Decoding: BOM is stripped by default, unless overridden by `stripBOM: false` option.
101
138
  - Encoding: No BOM added, unless overridden by `addBOM: true` option.
102
- 2. UTF-16 is an alias of UTF-16LE
103
- 3. UTF-32 is an alias of UTF-32LE
139
+ 1. UTF-16 is an alias of UTF-16LE
140
+ 1. UTF-32 is an alias of UTF-32LE
104
141
 
105
- ## Performance
142
+ ## Testing
106
143
 
107
- iconv-tiny vs iconv-lite
108
- 1. iconv-tiny is Browser oriented and doesn't use any NodeJS specific API like Buffer.
109
- 2. iconv-tiny can use native TextDecoder by `native: true` option.
110
- 3. iconv-tiny supports `encodeInto(Uint8Array)`, and there are no memory allocations.
111
- 4. iconv-lite uses NodeJS API and much faster for UTF-16 Encode/Decode in Node.
112
- 5. iconv-lite uses NodeJS's Buffer, but iconv-tiny uses Uint8Array.
144
+ ```
145
+ $ git clone https://github.com/vip-delete/iconv-tiny.git
146
+ $ cd iconv-tiny
147
+ $ npm test
113
148
 
114
- Below are the tests in NodeJS:
149
+ $ # To view performance:
150
+ $ node tests\perf-test-cp1251.mjs
151
+ $ node tests\perf-test-unicode.mjs
115
152
 
116
- ```
117
- /> node tests/perf-test-cp1251.mjs
153
+ $ # To view test coverage:
154
+ $ npm run coverage
118
155
 
119
- Encode 256KB text 10000 times:
120
- iconv-lite: 4837 ms, 516.8 Mb/s.
121
- iconv-tiny: 4228 ms, 591.3 Mb/s.
156
+ ----------------|---------|----------|---------|---------|-------------------
157
+ File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
158
+ ----------------|---------|----------|---------|---------|-------------------
159
+ All files | 100 | 100 | 98.21 | 100 |
160
+ commons.mjs | 100 | 100 | 88.88 | 100 |
161
+ iconv-tiny.mjs | 100 | 100 | 100 | 100 |
162
+ sbcs.mjs | 100 | 100 | 100 | 100 |
163
+ unicode.mjs | 100 | 100 | 100 | 100 |
164
+ ----------------|---------|----------|---------|---------|-------------------
165
+ ```
122
166
 
123
- Decode 256KB array 10000 times:
124
- iconv-lite: 17314 ms, 144.4 Mb/s.
125
- iconv-tiny: 20400 ms, 122.5 Mb/s.
126
- iconv-tiny: 11530 ms, 216.8 Mb/s. <--- native: true
167
+ ## Commands
127
168
 
128
- /> node tests/perf-test-unicode.mjs
129
- UTF8: Encode:
130
- iconv-lite: 4097 ms, 204.0 Mb/s.
131
- iconv-tiny: 1668 ms, 501.1 Mb/s. <-- TextEncoder
169
+ Build:
132
170
 
133
- UTF8: Decode:
134
- iconv-lite: 7103 ms, 117.7 Mb/s.
135
- iconv-tiny: 2960 ms, 282.4 Mb/s. <-- TextEncoder
171
+ ```
172
+ npm run build
173
+ ```
136
174
 
137
- UTF16: Encode:
138
- iconv-lite: 262 ms, 3190.5 Mb/s. <-- NodeJS API
139
- iconv-tiny: 6130 ms, 136.4 Mb/s. <-- "software" encode
175
+ UI Demo:
140
176
 
141
- UTF16: Decode:
142
- iconv-lite: 328 ms, 2548.5 Mb/s. <-- NodeJS API
143
- iconv-tiny: 1103 ms, 757.9 Mb/s. <-- TextDecoder
177
+ ```
178
+ npm run dev
179
+ ```
144
180
 
145
- UTF32: Encode:
146
- iconv-lite: 12391 ms, 67.5 Mb/s.
147
- iconv-tiny: 5787 ms, 144.4 Mb/s.
181
+ Compile (optional, you need JDK 21 or higher installed):
148
182
 
149
- UTF32: Decode:
150
- iconv-lite: 3856 ms, 216.8 Mb/s.
151
- iconv-tiny: 4494 ms, 186.0 Mb/s. <-- "software" decode
183
+ ```
184
+ npm run compile
152
185
  ```
153
186
 
154
187
  ## Demo
@@ -0,0 +1,87 @@
1
+ /**
2
+ * iconv-tiny v1.2.0
3
+ * (c) 2025-present vip.delete
4
+ * @license MIT
5
+ **/
6
+ let ns;
7
+ const k=new TextDecoder("UTF-16LE",{fatal:!0});class l{constructor(a){this.h=a}getName(){return this.h}decode(a,b){b=this.newDecoder(b);return b.decode(a)+b.decode()}encode(a,b){return this.newEncoder(b).encode(a)}}class m{constructor(a){this.g=a}decode(a){return this.g.decode(a,{stream:!!a})}}
8
+ class p{encode(a){if(!a)return new Uint8Array(0);const b=new Uint8Array(this.g(a));({written:a}=this.encodeInto(a,b));return b.subarray(0,a)}byteLength(a){let b=0;const c=new Uint8Array(4096);do{const {read:d,written:e}=this.encodeInto(a,c);a=a.slice(d);b+=e}while(a.length);return b}};class q{constructor(a,b){this.g=a;if(typeof b!=="function"){const c=b?.length?b.charCodeAt(0):65533;b=()=>c}this.h=b}decode(a){if(!a)return"";var b=this.g;const c=this.h,d=a.length,e=new Uint16Array(d);for(let g=0;g<d;g++){const h=a[g],n=b[h];e[g]=n===65533?c(h,g)??n:n}a:if(a=e.length,a<=192)var f=String.fromCharCode(...e);else{try{f=k.decode(e);break a}catch{}f=[];for(b=0;b<a;b+=1024)f.push(String.fromCharCode(...e.subarray(b,b+1024)));f=f.join("")}return f}}
9
+ class r extends p{constructor(a,b){super();this.h=a;if(typeof b!=="function"){const c=b?.length?b.charCodeAt(0):63;b=()=>c}this.i=b}encodeInto(a,b){const c=this.h,d=this.i,e=Math.min(a.length,b.length);for(let f=0;f<e;f++){const g=a.charCodeAt(f),h=c[g];b[f]=h===65533?d(g,f)??63:h}return{read:e,written:e}}g(a){return a.length}byteLength(a){return this.g(a)}}
10
+ class t extends l{constructor(a,b){super(a);this.i=b;this.g=null;try{new TextDecoder(this.h),this.j=!0}catch{this.j=!1}}newDecoder(a){return this.j&&(a?.native??!1)?new m(new TextDecoder(this.h)):new q(this.i,a?.defaultCharUnicode)}newEncoder(a){if(!this.g){this.g=(new Uint16Array(65536)).fill(65533);for(let b=0;b<256;b++){const c=this.i[b];c!==65533&&(this.g[c]=b)}}return new r(this.g,a?.defaultCharByte)}}
11
+ class u{constructor(a,b,c){this.g=a;this.h=b;this.i=c}create(a){var b=this.h,c=this.i??"";const d=(new Uint16Array(256)).fill(65533);for(var e=0;e<256-b.length;)d[e]=e++;let f=0;for(;e<256;)d[e++]=b.charCodeAt(f++);for(b=0;b<c.length;)d[c.charCodeAt(b)]=c.charCodeAt(b+1),b+=2;a=a?.overrides??[];for(c=0;c<a.length-1;)b=a[c++],e=a[c++],d[Number(b)]=typeof e==="number"?e:e.charCodeAt(0);return new t(this.g,d)}};const v=(a,b,c,d)=>{a=a.charCodeAt(b);c[d]=a;c[d+1]=a>>8;return 0},w=(a,b,c,d)=>{a=a.charCodeAt(b);c[d]=a>>8;c[d+1]=a;return 0},x=(a,b,c,d)=>{a=a.codePointAt(b);c[d]=a;c[d+1]=a>>8;c[d+2]=a>>16;c[d+3]=a>>24;return a>65535?1:0},y=(a,b,c,d)=>{a=a.codePointAt(b);c[d]=a>>24;c[d+1]=a>>16;c[d+2]=a>>8;c[d+3]=a;return a>65535?1:0},z=(a,b)=>(a[b]|a[b+1]<<8|a[b+2]<<16|a[b+3]<<24)>>>0,A=(a,b)=>(a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3])>>>0,B=(a,b,c)=>{c>1114111&&(c=65533);if(c>65535){c-=65536;const d=55296|c>>10;
12
+ c=56320|c&1023;a[b]=d;a[b+1]=d>>8;a[b+2]=c;a[b+3]=c>>8;return 4}a[b]=c;a[b+1]=c>>8;return 2};class C extends m{constructor(a){super(new TextDecoder("UTF-8",{ignoreBOM:a}))}}class D extends p{constructor(a){super();this.h=a;this.i=new TextEncoder}encodeInto(a,b){let c=0;if(this.h){if(b.length<3)return{read:0,written:0};b[0]=239;b[1]=187;b[2]=191;c+=3;this.h=0}const {read:d,written:e}=this.i.encodeInto(a,b.subarray(c));return{read:d,written:e+c}}g(a){return(this.h?4:0)+a.length*4}}
13
+ class E extends p{constructor(a,b,c){super();this.i=a;this.h=1<<b+1;this.j=b?c?y:x:c?w:v}encodeInto(a,b){const c=this.h,d=this.j;let e=0;if(this.i){if(b.length<c)return{read:0,written:0};d("",0,b,e);e+=c;this.i=0}const f=Math.min(a.length,b.length-e&~(c-1));for(let g=0;g<f;g++,e+=c)g+=d(a,g,b,e);return{read:f,written:e}}g(a){return(this.i?this.h:0)+a.length*this.h}byteLength(a){return this.h===4?super.byteLength(a):this.g(a)}}const F=["LE","BE",""],G=[16,32,8];
14
+ class H extends m{constructor(a,b){super(new TextDecoder("UTF-16"+F[b],{ignoreBOM:a}))}}
15
+ class I{constructor(a,b){this.j=a;this.h=new Uint8Array(4);this.g=0;this.i=b?A:z}decode(a){if(!a)return this.g?String.fromCharCode(65533):"";const b=new Uint8Array(a.length+4);let c=0,d=0;if(this.g){for(;this.g<4&&c<a.length;)this.h[this.g++]=a[c++];if(this.g<4)return"";d+=B(b,d,this.i(this.h,0))}const e=a.length-3;for(;c<e;c+=4)d+=B(b,d,this.i(a,c));(this.g=a.length-c)&&this.h.set(a.subarray(c));return(new TextDecoder("UTF-16",{ignoreBOM:this.j})).decode(b.subarray(0,d))}}
16
+ const J=[H,I,C],K=[E,E,D];class L extends l{constructor(a,b){super("UTF-"+G[a]+F[b]);this.g=a;this.i=b}newDecoder(a){return new J[this.g](!(a?.stripBOM??1),this.i)}newEncoder(a){return new K[this.g](a?.addBOM??0,this.g,this.i)}}class M{constructor(a,b){this.h=a;this.g=b}create(){return new L(this.h,this.g)}};const N=a=>a.toLowerCase().replace(/[^a-z0-9]/gu,"").replace(/(?<!\d)0+/gu,"");
17
+ class O{constructor(a,b){a??={};this.g=new Map;this.cache=new Map;b=(b??"").split(",").map(c=>c.split(" ").map(N));for(const c of Object.keys(a)){const d=a[c];if(d?.create){const e=N(c);this.g.set(e,d);b.filter(f=>f.includes(e)).forEach(f=>f.forEach(g=>this.g.set(g,d)))}}}decode(a,b,c){return this.getEncoding(b,c).decode(a,c)}encode(a,b,c){return this.getEncoding(b,c).encode(a,c)}getEncoding(a,b){a=N(a);const c=a+(b?.overrides??"");var d=this.cache.get(c);if(!d){d=this.g.get(a);if(!d)throw Error(`Encoding "${a}" not supported`);
18
+ d=d.create(b);this.cache.set(c,d)}return d}};ns={canonicalize:N,IconvTiny:O,SBCS:u,Unicode:M};
19
+ export const {canonicalize,IconvTiny,SBCS,Unicode}=ns;
20
+
21
+ export const
22
+ ISO_8859_1=new SBCS("ISO-8859-1",""),
23
+ ISO_8859_2=new SBCS("ISO-8859-2","Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"),
24
+ ISO_8859_3=new SBCS("ISO-8859-3","ŭŝ˙","¡Ħ¢˘¥�¦Ĥ©İªŞ«Ğ¬Ĵ®�¯Ż±ħ¶ĥ¹ıºş»ğ¼ĵ¾�¿żÃ�ÅĊÆĈÐ�ÕĠØĜÝŬÞŜã�åċæĉð�õġøĝ"),
25
+ ISO_8859_4=new SBCS("ISO-8859-4","ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"),
26
+ ISO_8859_5=new SBCS("ISO-8859-5","ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"),
27
+ ISO_8859_6=new SBCS("ISO-8859-6","���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������"),
28
+ ISO_8859_7=new SBCS("ISO-8859-7","΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�","¡‘¢’¤€¥₯ªͺ®�¯―"),
29
+ ISO_8859_8=new SBCS("ISO-8859-8","��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�","¡�ª×º÷"),
30
+ ISO_8859_9=new SBCS("ISO-8859-9","ışÿ","ÐĞÝİÞŞðğ"),
31
+ ISO_8859_10=new SBCS("ISO-8859-10","ĸ","¡Ą¢Ē£Ģ¤Ī¥Ĩ¦Ķ¨Ļ©ĐªŠ«Ŧ¬Ž®Ū¯Ŋ±ą²ē³ģ´īµĩ¶ķ¸ļ¹đºš»ŧ¼ž½―¾ū¿ŋÀĀÇĮÈČÊĘÌĖÑŅÒŌ×ŨÙŲàāçįèčêęìėñņòō÷ũùų"),
32
+ ISO_8859_11=new SBCS("ISO-8859-11","กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"),
33
+ ISO_8859_13=new SBCS("ISO-8859-13","æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’","¡”¥„¨ØªŖ¯Æ´“¸øºŗ"),
34
+ ISO_8859_14=new SBCS("ISO-8859-14","ŷÿ","¡Ḃ¢ḃ¤Ċ¥ċ¦Ḋ¨ẀªẂ«ḋ¬Ỳ¯Ÿ°Ḟ±ḟ²Ġ³ġ´Ṁµṁ·Ṗ¸ẁ¹ṗºẃ»Ṡ¼ỳ½Ẅ¾ẅ¿ṡÐŴ×ṪÞŶðŵ÷ṫ"),
35
+ ISO_8859_15=new SBCS("ISO-8859-15","","¤€¦Š¨š´Ž¸ž¼Œ½œ¾Ÿ"),
36
+ ISO_8859_16=new SBCS("ISO-8859-16","ęțÿ","¡Ą¢ą£Ł¤€¥„¦Š¨šªȘ¬Ź®ź¯Ż²Č³ł´Žµ”¸ž¹čºș¼Œ½œ¾Ÿ¿żÃĂÅĆÐĐÑŃÕŐ׌ØŰÝĘÞȚãăåćðđñńõő÷śøű"),
37
+ CP037=new SBCS("CP037","œ\t†\x7F—Ž\v\f\r…‡’€‚ƒ„\nˆ‰Š‹Œ‘“”•–˜™š›ž \xA0âäàáãåçñ¢.<(+|&éêëèíîïìß!$*);¬-/ÂÄÀÁÃÅÇѦ,%_>?øÉÊËÈÍÎÏÌ`:#@'=\"Øabcdefghi«»ðýþ±°jklmnopqrªºæ¸Æ¤µ~stuvwxyz¡¿ÐÝÞ®^£¥·©§¶¼½¾[]¯¨´×{ABCDEFGHI­ôöòóõ}JKLMNOPQR¹ûüùúÿ\\÷STUVWXYZ²ÔÖÒÓÕ0123456789³ÛÜÙڟ"),
38
+ CP500=new SBCS("CP500","œ\t†\x7F—Ž\v\f\r…‡’€‚ƒ„\nˆ‰Š‹Œ‘“”•–˜™š›ž \xA0âäàáãåçñ[.<(+!&éêëèíîïìß]$*);^-/ÂÄÀÁÃÅÇѦ,%_>?øÉÊËÈÍÎÏÌ`:#@'=\"Øabcdefghi«»ðýþ±°jklmnopqrªºæ¸Æ¤µ~stuvwxyz¡¿ÐÝÞ®¢£¥·©§¶¼½¾¬|¯¨´×{ABCDEFGHI­ôöòóõ}JKLMNOPQR¹ûüùúÿ\\÷STUVWXYZ²ÔÖÒÓÕ0123456789³ÛÜÙڟ"),
39
+ CP875=new SBCS("CP875","œ\t†\x7F—Ž\v\f\r…‡’€‚ƒ„\nˆ‰Š‹Œ‘“”•–˜™š›ž ΑΒΓΔΕΖΗΘΙ[.<(+!&ΚΛΜΝΞΟΠΡΣ]$*);^-/ΤΥΦΧΨΩΪΫ|,%_>?¨ΆΈΉ\xA0ΊΌΎΏ`:#@'=\"΅abcdefghiαβγδεζ°jklmnopqrηθικλμ´~stuvwxyzνξοπρσ£άέήϊίόύϋώςτυφχψ{ABCDEFGHI­ωΐΰ‘―}JKLMNOPQR±½�·’¦\\₯STUVWXYZ²§ͺ�«¬0123456789³©€�»Ÿ"),
40
+ CP1026=new SBCS("CP1026","œ\t†\x7F—Ž\v\f\r…‡’€‚ƒ„\nˆ‰Š‹Œ‘“”•–˜™š›ž \xA0âäàáãå{ñÇ.<(+!&éêëèíîïìßĞİ*);^-/ÂÄÀÁÃÅ[Ñş,%_>?øÉÊËÈÍÎÏÌı:ÖŞ'=ÜØabcdefghi«»}`¦±°jklmnopqrªºæ¸Æ¤µöstuvwxyz¡¿]$@®¢£¥·©§¶¼½¾¬|¯¨´×çABCDEFGHI­ô~òóõğJKLMNOPQR¹û\\ùúÿü÷STUVWXYZ²Ô#ÒÓÕ0123456789³Û\"Ùڟ"),
41
+ CP437=new SBCS("CP437","ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"),
42
+ CP737=new SBCS("CP737","ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■\xA0"),
43
+ CP775=new SBCS("CP775","ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■\xA0"),
44
+ CP850=new SBCS("CP850","ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■\xA0"),
45
+ CP852=new SBCS("CP852","ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■\xA0"),
46
+ CP855=new SBCS("CP855","ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■\xA0"),
47
+ CP857=new SBCS("CP857","ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■\xA0"),
48
+ CP860=new SBCS("CP860","ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"),
49
+ CP861=new SBCS("CP861","ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"),
50
+ CP862=new SBCS("CP862","אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"),
51
+ CP863=new SBCS("CP863","ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"),
52
+ CP864=new SBCS("CP864","°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ�\xA0­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�","%٪"),
53
+ CP865=new SBCS("CP865","ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"),
54
+ CP866=new SBCS("CP866","АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■\xA0"),
55
+ CP869=new SBCS("CP869","������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■\xA0"),
56
+ CP874=new SBCS("CP874","€����…�����������‘’“”•–—��������\xA0กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"),
57
+ CP1250=new SBCS("CP1250","€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź\xA0ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"),
58
+ CP1251=new SBCS("CP1251","ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ\xA0ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"),
59
+ CP1252=new SBCS("CP1252","","€€�‚‚ƒƒ„„……††‡‡ˆˆ‰‰ŠŠ‹‹ŒŒ�ŽŽ��‘‘’’““””••––——˜˜™™šš››œœ�žžŸŸ"),
60
+ CP1253=new SBCS("CP1253","€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›����\xA0΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"),
61
+ CP1254=new SBCS("CP1254","ışÿ","€€�‚‚ƒƒ„„……††‡‡ˆˆ‰‰ŠŠ‹‹ŒŒ�Ž���‘‘’’““””••––——˜˜™™šš››œœ�ž�ŸŸÐĞÝİÞŞðğ"),
62
+ CP1255=new SBCS("CP1255","€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›����\xA0¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"),
63
+ CP1256=new SBCS("CP1256","€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں\xA0،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے"),
64
+ CP1257=new SBCS("CP1257","€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛�\xA0�¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙"),
65
+ CP1258=new SBCS("CP1258","ư₫ÿ","€€�‚‚ƒƒ„„……††‡‡ˆˆ‰‰Š�‹‹ŒŒ�Ž���‘‘’’““””••––——˜˜™™š�››œœ�ž�ŸŸÃĂÌ̀ÐĐÒ̉ÕƠÝƯÞ̃ãăì́ðđọ̀õơ"),
66
+ MAC_CYRILLIC=new SBCS("MAC-CYRILLIC","АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»…\xA0ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"),
67
+ MAC_GREEK=new SBCS("MAC-GREEK","Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»…\xA0ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"),
68
+ MAC_ICELAND=new SBCS("MAC-ICELAND","ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"),
69
+ MAC_LATIN2=new SBCS("MAC-LATIN2","ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»…\xA0ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"),
70
+ MAC_ROMAN=new SBCS("MAC-ROMAN","ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"),
71
+ MAC_TURKISH=new SBCS("MAC-TURKISH","ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"),
72
+ ATARIST=new SBCS("ATARIST","ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥ßƒáíóúñѪº¿⌐¬½¼¡«»ãõØøœŒÀÃÕ¨´†¶©®™ijIJאבגדהוזחטיכלמנסעפצקרשתןךםףץ§∧∞αβΓπΣσµτΦΘΩδ∮φ∈∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²³¯"),
73
+ CP424=new SBCS("CP424","œ\t†\x7F—Ž\v\f\r…‡’€‚ƒ„\nˆ‰Š‹Œ‘“”•–˜™š›ž אבגדהוזחט¢.<(+|&יךכלםמןנס!$*);¬-/עףפץצקרש¦,%_>?pתrs\xA0uvw‗`:#@'=\"�abcdefghi«»���±°jklmnopqr���¸�¤µ~stuvwxyz�����®^£¥·©§¶¼½¾[]¯¨´×{ABCDEFGHI­�����}JKLMNOPQR¹�����\\÷STUVWXYZ²�����0123456789³����Ÿ"),
74
+ CP856=new SBCS("CP856","אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■\xA0"),
75
+ CP1006=new SBCS("CP1006","۰۱۲۳۴۵۶۷۸۹،؛­؟ﺁﺍﺎﺎﺏﺑﭖﭘﺓﺕﺗﭦﭨﺙﺛﺝﺟﭺﭼﺡﺣﺥﺧﺩﮄﺫﺭﮌﺯﮊﺱﺳﺵﺷﺹﺻﺽﺿﻁﻅﻉﻊﻋﻌﻍﻎﻏﻐﻑﻓﻕﻗﻙﻛﮒﮔﻝﻟﻠﻡﻣﮞﻥﻧﺅﻭﮦﮨﮩﮪﺀﺉﺊﺋﻱﻲﻳﮰﮮﹼﹽ"),
76
+ KOI8_R=new SBCS("KOI8-R","─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥\xA0⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"),
77
+ KOI8_U=new SBCS("KOI8-U","─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥\xA0⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"),
78
+ KZ1048=new SBCS("KZ1048","ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ\xA0ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"),
79
+ NEXTSTEP=new SBCS("NEXTSTEP","\xA0ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝÞµ×÷©¡¢£⁄¥ƒ§¤’“«‹›fifl®–†‡·¦¶•‚„”»…‰¬¿¹ˋ´ˆ˜¯˘˙¨²˚¸³˝˛ˇ—±¼½¾àáâãäåçèéêëìÆíªîïðñŁØŒºòóôõöæùúûıüýłøœßþÿ��"),
80
+ US_ASCII=new SBCS("US-ASCII","�".repeat(128)),
81
+ UTF8=new Unicode(2,2),
82
+ UTF16LE=new Unicode(0,0),
83
+ UTF16BE=new Unicode(0,1),
84
+ UTF32LE=new Unicode(1,0),
85
+ UTF32BE=new Unicode(1,1),
86
+ encodings={ISO_8859_1,ISO_8859_2,ISO_8859_3,ISO_8859_4,ISO_8859_5,ISO_8859_6,ISO_8859_7,ISO_8859_8,ISO_8859_9,ISO_8859_10,ISO_8859_11,ISO_8859_13,ISO_8859_14,ISO_8859_15,ISO_8859_16,CP037,CP500,CP875,CP1026,CP437,CP737,CP775,CP850,CP852,CP855,CP857,CP860,CP861,CP862,CP863,CP864,CP865,CP866,CP869,CP874,CP1250,CP1251,CP1252,CP1253,CP1254,CP1255,CP1256,CP1257,CP1258,MAC_CYRILLIC,MAC_GREEK,MAC_ICELAND,MAC_LATIN2,MAC_ROMAN,MAC_TURKISH,ATARIST,CP424,CP856,CP1006,KOI8_R,KOI8_U,KZ1048,NEXTSTEP,US_ASCII,UTF8,UTF16LE,UTF16BE,UTF32LE,UTF32BE},
87
+ aliases="ISO-8859-1 819 88591 cp819 csisolatin1 ibm819 isoir100 l1 latin1,ISO-8859-2 88592 912 cp912 csisolatin2 ibm912 isoir101 l2 latin2,ISO-8859-3 88593 913 cp913 csisolatin3 ibm913 isoir109 l3 latin3,ISO-8859-4 88594 914 cp914 csisolatin4 ibm914 isoir110 l4 latin4,ISO-8859-5 88595 915 cp915 csisolatincyrillic cyrillic ibm915 isoir144,ISO-8859-6 1089 88596 arabic asmo708 cp1089 csisolatinarabic ecma114 ibm1089 isoir127,ISO-8859-7 813 88597 cp813 csisolatingreek ecma118 elot928 greek greek8 ibm813 isoir126 suneugreek,ISO-8859-8 88598 916 cp916 csisolatinhebrew hebrew ibm916 isoir138,ISO-8859-9 88599 920 cp920 csisolatin5 ibm920 isoir148 l5 latin5,ISO-8859-10 csisolatin6 isoir157 l6 latin6,ISO-8859-11 xiso885911,ISO-8859-13 885913,ISO-8859-14 isoceltic isoir199 l8 latin8,ISO-8859-15 885915 923 cp923 csiso885915 csisolatin csisolatin9 ibm923 iso885915fdis l9 latin latin9,ISO-8859-16 csiso885916 iso8859162001 isoir226 l10 latin10,CP037 37 cpibm37 csebcdiccpca csebcdiccpnl csebcdiccpus csebcdiccpwt csibm37 ebcdiccpca ebcdiccpnl ebcdiccpus ebcdiccpwt ibm37,CP500 500 csibm500 ebcdiccpbh ebcdiccpch ibm500,CP875 875 ibm875 xibm875,CP1026 1026 ibm1026,CP437 437 cspc8codepage437 ibm437 windows437,CP737 737 ibm737 xibm737,CP775 775 ibm775,CP850 850 cspc850multilingual ibm850,CP852 852 cspcp852 ibm852,CP855 855 cspcp855 ibm855,CP857 857 csibm857 ibm857,CP860 860 csibm860 ibm860,CP861 861 cpis csibm861 ibm861,CP862 862 csibm862 cspc862latinhebrew ibm862,CP863 863 csibm863 ibm863,CP864 864 csibm864 ibm864,CP865 865 csibm865 ibm865,CP866 866 csibm866 ibm866,CP869 869 cpgr csibm869 ibm869,CP874 874 ibm874 xibm874,CP1250 cp5346 win1250 windows1250,CP1251 ansi1251 cp5347 win1251 windows1251,CP1252 cp5348 ibm1252 win1252 windows1252,CP1253 cp5349 win1253 windows1253,CP1254 cp5350 win1254 windows1254,CP1255 win1255 windows1255,CP1256 win1256 windows1256,CP1257 cp5353 win1257 windows1257,CP1258 win1258 windows1258,MAC-CYRILLIC xmaccyrillic,MAC-GREEK xmacgreek,MAC-ICELAND xmaciceland,MAC-LATIN2 maccentraleurope xmaccentraleurope,MAC-ROMAN xmacroman,MAC-TURKISH xmacturkish,ATARIST,CP424 424 csibm424 ebcdiccphe ibm424,CP856 856 ibm856 xibm856,CP1006 1006 ibm1006 xibm1006,KOI8-R cskoi8r koi8,KOI8-U cskoi8u,KZ1048 cskz1048 rk1048 strk10482002,NEXTSTEP we8nextstep,US-ASCII 646 ansix34 ascii ascii7 cp367 csascii default ibm367 iso646irv iso646us isoir6 us,UTF8 unicode11utf8,UTF16LE utf16,UTF16BE,UTF32LE utf32,UTF32BE";