js-codepage/misc/README.md.utf7

262 lines
14 KiB
Plaintext
Raw Normal View History

+ACM Codepages for JS
+AFs-Codepages+AF0(https://en.wikipedia.org/wiki/Codepage) are character encodings. In
many contexts, single-byte character sets are used in lieu of standard multibyte
Unicode encodings. They use 256 characters with a simple mapping.
+AFs-unicode.org+AF0(http://www.unicode.org/Public/MAPPINGS/) hosts lists of mappings.
The build script automatically downloads and parses the mappings in order to
generate the full script. The +AGA-pages.csv+AGA description in +AGA-codepage.md+AGA controls
which codepages are used.
+ACMAIw Setup
In the browser:
+ADw-script src+AD0AIg-cptable.js+ACIAPgA8-/script+AD4
+ADw-script src+AD0AIg-cputils.js+ACIAPgA8-/script+AD4
The complete set of codepages is large due to some Double Byte Character Set
encodings. A much smaller file that just includes SBCS codepages is provided in
this repo (+AGA-sbcs.js+AGA), as well as a file for other projects (+AGA-cpexcel.js+AGA)
If you know which codepages you need, you can include individual scripts for
each codepage. The individual files are provided in the +AGA-bits/+AGA directory.
For example, to include only the Mac codepages:
+ADw-script src+AD0AIg-bits/10000.js+ACIAPgA8-/script+AD4
+ADw-script src+AD0AIg-bits/10006.js+ACIAPgA8-/script+AD4
+ADw-script src+AD0AIg-bits/10007.js+ACIAPgA8-/script+AD4
+ADw-script src+AD0AIg-bits/10029.js+ACIAPgA8-/script+AD4
+ADw-script src+AD0AIg-bits/10079.js+ACIAPgA8-/script+AD4
+ADw-script src+AD0AIg-bits/10081.js+ACIAPgA8-/script+AD4
All of the browser scripts define and append to the +AGA-cptable+AGA object. To rename
the object, edit the +AGA-JSVAR+AGA shell variable in +AGA-make.sh+AGA and run the script.
The utilities functions are contained in +AGA-cputils.js+AGA, which assumes that the
appropriate codepage scripts were loaded.
In node:
var cptable +AD0 require('codepage')+ADs
+ACMAIw Usage
The codepages are indexed by number. To get the unicode character for a given
codepoint, use the +AGA-dec+AGA property:
var unicode+AF8-cp10000+AF8-255 +AD0 cptable+AFs-10000+AF0.dec+AFs-255+AF0AOw // +Asc
To get the codepoint for a given character, use the +AGA-enc+AGA property:
var cp10000+AF8-711 +AD0 cptable+AFs-10000+AF0.enc+AFs-String.fromCharCode(711)+AF0AOw // 255
There are a few utilities that deal with strings and buffers:
var +bEdgOw +AD0 cptable.utils.decode(936, +AFs-0xbb,0xe3,0xd7,0xdc+AF0)+ADs
var buf +AD0 cptable.utils.encode(936, +bEdgOw)+ADs
+AGA-cptable.utils.encode(CP, data, ofmt)+AGA accepts a String or Array of characters
and returns a representation controlled by +AGA-ofmt+AGA:
- Default output is a Buffer (or Array) of bytes (integers between 0 and 255).
- If +AGA-ofmt +AD0APQ 'str'+AGA, return a String where +AGA-o.charCodeAt(i)+AGA is the ith byte
- If +AGA-ofmt +AD0APQ 'arr'+AGA, return an Array of bytes
+ACMAIw Building the script
This script uses +AFs-voc+AF0(npm.im/voc). The script to build the codepage tables and
the JS source is +AGA-codepage.md+AGA, so building is as simple as +AGA-voc codepage.md+AGA.
+ACMAIw Generated Codepages
The complete list of hardcoded codepages can be found in the file +AGA-pages.csv+AGA.
Some codepages are easier to implement algorithmically. Since these are
hardcoded in utils, there is no corresponding entry (they are +ACI-magic+ACI)
+AHw CP+ACM +AHw Information +AHw Description +AHw
+AHw --: +AHw ----------- +AHw ----------- +AHw
+AHw 37+AHw unicode.org +AHw-IBM EBCDIC US-Canada
+AHw 437+AHw unicode.org +AHw-OEM United States
+AHw 500+AHw unicode.org +AHw-IBM EBCDIC International
+AHw 708+AHw-MakeEncoding.cs+AHw-Arabic (ASMO 708)
+AHw 720+AHw-MakeEncoding.cs+AHw-Arabic (Transparent ASMO)+ADs Arabic (DOS)
+AHw 737+AHw unicode.org +AHw-OEM Greek (formerly 437G)+ADs Greek (DOS)
+AHw 775+AHw unicode.org +AHw-OEM Baltic+ADs Baltic (DOS)
+AHw 850+AHw unicode.org +AHw-OEM Multilingual Latin 1+ADs Western European (DOS)
+AHw 852+AHw unicode.org +AHw-OEM Latin 2+ADs Central European (DOS)
+AHw 855+AHw unicode.org +AHw-OEM Cyrillic (primarily Russian)
+AHw 857+AHw unicode.org +AHw-OEM Turkish+ADs Turkish (DOS)
+AHw 858+AHw-MakeEncoding.cs+AHw-OEM Multilingual Latin 1 +- Euro symbol
+AHw 860+AHw unicode.org +AHw-OEM Portuguese+ADs Portuguese (DOS)
+AHw 861+AHw unicode.org +AHw-OEM Icelandic+ADs Icelandic (DOS)
+AHw 862+AHw unicode.org +AHw-OEM Hebrew+ADs Hebrew (DOS)
+AHw 863+AHw unicode.org +AHw-OEM French Canadian+ADs French Canadian (DOS)
+AHw 864+AHw unicode.org +AHw-OEM Arabic+ADs Arabic (864)
+AHw 865+AHw unicode.org +AHw-OEM Nordic+ADs Nordic (DOS)
+AHw 866+AHw unicode.org +AHw-OEM Russian+ADs Cyrillic (DOS)
+AHw 869+AHw unicode.org +AHw-OEM Modern Greek+ADs Greek, Modern (DOS)
+AHw 870+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Multilingual/ROECE (Latin 2)
+AHw 874+AHw unicode.org +AHw-Windows Thai
+AHw 875+AHw unicode.org +AHw-IBM EBCDIC Greek Modern
+AHw 932+AHw unicode.org +AHw-Japanese Shift-JIS
+AHw 936+AHw unicode.org +AHw-Simplified Chinese GBK
+AHw 949+AHw unicode.org +AHw-Korean
+AHw 950+AHw unicode.org +AHw-Traditional Chinese Big5
+AHw 1026+AHw unicode.org +AHw-IBM EBCDIC Turkish (Latin 5)
+AHw 1047+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Latin 1/Open System
+AHw 1140+AHw-MakeEncoding.cs+AHw-IBM EBCDIC US-Canada (037 +- Euro symbol)
+AHw 1141+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Germany (20273 +- Euro symbol)
+AHw 1142+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Denmark-Norway (20277 +- Euro symbol)
+AHw 1143+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Finland-Sweden (20278 +- Euro symbol)
+AHw 1144+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Italy (20280 +- Euro symbol)
+AHw 1145+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Latin America-Spain (20284 +- Euro symbol)
+AHw 1146+AHw-MakeEncoding.cs+AHw-IBM EBCDIC United Kingdom (20285 +- Euro symbol)
+AHw 1147+AHw-MakeEncoding.cs+AHw-IBM EBCDIC France (20297 +- Euro symbol)
+AHw 1148+AHw-MakeEncoding.cs+AHw-IBM EBCDIC International (500 +- Euro symbol)
+AHw 1149+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Icelandic (20871 +- Euro symbol)
+AHw 1200+AHw magic +AHw-Unicode UTF-16, little endian (BMP of ISO 10646)
+AHw 1201+AHw magic +AHw-Unicode UTF-16, big endian
+AHw 1250+AHw unicode.org +AHw-Windows Central Europe
+AHw 1251+AHw unicode.org +AHw-Windows Cyrillic
+AHw 1252+AHw unicode.org +AHw-Windows Latin I
+AHw 1253+AHw unicode.org +AHw-Windows Green
+AHw 1254+AHw unicode.org +AHw-Windows Turkish
+AHw 1255+AHw unicode.org +AHw-Windows Hebrew
+AHw 1256+AHw unicode.org +AHw-Windows Arabic
+AHw 1257+AHw unicode.org +AHw-Windows Baltic
+AHw 1258+AHw unicode.org +AHw-Windows Vietnam
+AHw 1361+AHw-MakeEncoding.cs+AHw-Korean (Johab)
+AHw-10000+AHw unicode.org +AHw-MAC Roman
+AHw-10001+AHw-MakeEncoding.cs+AHw-Japanese (Mac)
+AHw-10002+AHw-MakeEncoding.cs+AHw-MAC Traditional Chinese (Big5)
+AHw-10003+AHw-MakeEncoding.cs+AHw-Korean (Mac)
+AHw-10004+AHw-MakeEncoding.cs+AHw-Arabic (Mac)
+AHw-10005+AHw-MakeEncoding.cs+AHw-Hebrew (Mac)
+AHw-10006+AHw unicode.org +AHw-Greek (Mac)
+AHw-10007+AHw unicode.org +AHw-Cyrillic (Mac)
+AHw-10008+AHw-MakeEncoding.cs+AHw-MAC Simplified Chinese (GB 2312)
+AHw-10010+AHw-MakeEncoding.cs+AHw-Romanian (Mac)
+AHw-10017+AHw-MakeEncoding.cs+AHw-Ukrainian (Mac)
+AHw-10021+AHw-MakeEncoding.cs+AHw-Thai (Mac)
+AHw-10029+AHw unicode.org +AHw-MAC Latin 2 (Central European)
+AHw-10079+AHw unicode.org +AHw-Icelandic (Mac)
+AHw-10081+AHw unicode.org +AHw-Turkish (Mac)
+AHw-10082+AHw-MakeEncoding.cs+AHw-Croatian (Mac)
+AHw-12000+AHw magic +AHw-Unicode UTF-32, little endian byte order
+AHw-12001+AHw magic +AHw-Unicode UTF-32, big endian byte order
+AHw-20000+AHw-MakeEncoding.cs+AHw-CNS Taiwan (Chinese Traditional)
+AHw-20001+AHw-MakeEncoding.cs+AHw-TCA Taiwan
+AHw-20002+AHw-MakeEncoding.cs+AHw-Eten Taiwan (Chinese Traditional)
+AHw-20003+AHw-MakeEncoding.cs+AHw-IBM5550 Taiwan
+AHw-20004+AHw-MakeEncoding.cs+AHw-TeleText Taiwan
+AHw-20005+AHw-MakeEncoding.cs+AHw-Wang Taiwan
+AHw-20105+AHw-MakeEncoding.cs+AHw-Western European IA5 (IRV International Alphabet 5) 7-bit
+AHw-20106+AHw-MakeEncoding.cs+AHw-IA5 German (7-bit)
+AHw-20107+AHw-MakeEncoding.cs+AHw-IA5 Swedish (7-bit)
+AHw-20108+AHw-MakeEncoding.cs+AHw-IA5 Norwegian (7-bit)
+AHw-20127+AHw magic +AHw-US-ASCII (7-bit)
+AHw-20261+AHw-MakeEncoding.cs+AHw-T.61
+AHw-20269+AHw-MakeEncoding.cs+AHw-ISO 6937 Non-Spacing Accent
+AHw-20273+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Germany
+AHw-20277+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Denmark-Norway
+AHw-20278+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Finland-Sweden
+AHw-20280+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Italy
+AHw-20284+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Latin America-Spain
+AHw-20285+AHw-MakeEncoding.cs+AHw-IBM EBCDIC United Kingdom
+AHw-20290+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Japanese Katakana Extended
+AHw-20297+AHw-MakeEncoding.cs+AHw-IBM EBCDIC France
+AHw-20420+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Arabic
+AHw-20423+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Greek
+AHw-20424+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Hebrew
+AHw-20833+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Korean Extended
+AHw-20838+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Thai
+AHw-20866+AHw-MakeEncoding.cs+AHw-Russian Cyrillic (KOI8-R)
+AHw-20871+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Icelandic
+AHw-20880+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Cyrillic Russian
+AHw-20905+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Turkish
+AHw-20924+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Latin 1/Open System (1047 +- Euro symbol)
+AHw-20932+AHw-MakeEncoding.cs+AHw-Japanese (JIS 0208-1990 and 0212-1990)
+AHw-20936+AHw-MakeEncoding.cs+AHw-Simplified Chinese (GB2312-80)
+AHw-20949+AHw-MakeEncoding.cs+AHw-Korean Wansung
+AHw-21025+AHw-MakeEncoding.cs+AHw-IBM EBCDIC Cyrillic Serbian-Bulgarian
+AHw-21866+AHw-MakeEncoding.cs+AHw-Ukrainian Cyrillic (KOI8-U)
+AHw-28591+AHw unicode.org +AHw-ISO 8859-1 Latin 1 (Western European)
+AHw-28592+AHw unicode.org +AHw-ISO 8859-2 Latin 2 (Central European)
+AHw-28593+AHw unicode.org +AHw-ISO 8859-3 Latin 3
+AHw-28594+AHw unicode.org +AHw-ISO 8859-4 Baltic
+AHw-28595+AHw unicode.org +AHw-ISO 8859-5 Cyrillic
+AHw-28596+AHw unicode.org +AHw-ISO 8859-6 Arabic
+AHw-28597+AHw unicode.org +AHw-ISO 8859-7 Greek
+AHw-28598+AHw unicode.org +AHw-ISO 8859-8 Hebrew (ISO-Visual)
+AHw-28599+AHw unicode.org +AHw-ISO 8859-9 Turkish
+AHw-28600+AHw unicode.org +AHw-ISO 8859-10 Latin 6
+AHw-28601+AHw unicode.org +AHw-ISO 8859-11 Latin (Thai)
+AHw-28603+AHw unicode.org +AHw-ISO 8859-13 Latin 7 (Estonian)
+AHw-28604+AHw unicode.org +AHw-ISO 8859-14 Latin 8 (Celtic)
+AHw-28605+AHw unicode.org +AHw-ISO 8859-15 Latin 9
+AHw-28606+AHw unicode.org +AHw-ISO 8859-15 Latin 10
+AHw-29001+AHw-MakeEncoding.cs+AHw-Europa 3
+AHw-38598+AHw-MakeEncoding.cs+AHw-ISO 8859-8 Hebrew (ISO-Logical)
+AHw-50220+AHw-MakeEncoding.cs+AHw-ISO 2022 JIS Japanese with no halfwidth Katakana
+AHw-50221+AHw-MakeEncoding.cs+AHw-ISO 2022 JIS Japanese with halfwidth Katakana
+AHw-50222+AHw-MakeEncoding.cs+AHw-ISO 2022 Japanese JIS X 0201-1989 (1 byte Kana-SO/SI)
+AHw-50225+AHw-MakeEncoding.cs+AHw-ISO 2022 Korean
+AHw-50227+AHw-MakeEncoding.cs+AHw-ISO 2022 Simplified Chinese
+AHw-51932+AHw-MakeEncoding.cs+AHw-EUC Japanese
+AHw-51936+AHw-MakeEncoding.cs+AHw-EUC Simplified Chinese
+AHw-51949+AHw-MakeEncoding.cs+AHw-EUC Korean
+AHw-52936+AHw-MakeEncoding.cs+AHw-HZ-GB2312 Simplified Chinese
+AHw-54936+AHw-MakeEncoding.cs+AHw-GB18030 Simplified Chinese (4 byte)
+AHw-57002+AHw-MakeEncoding.cs+AHw-ISCII Devanagari
+AHw-57003+AHw-MakeEncoding.cs+AHw-ISCII Bengali
+AHw-57004+AHw-MakeEncoding.cs+AHw-ISCII Tamil
+AHw-57005+AHw-MakeEncoding.cs+AHw-ISCII Telugu
+AHw-57006+AHw-MakeEncoding.cs+AHw-ISCII Assamese
+AHw-57007+AHw-MakeEncoding.cs+AHw-ISCII Oriya
+AHw-57008+AHw-MakeEncoding.cs+AHw-ISCII Kannada
+AHw-57009+AHw-MakeEncoding.cs+AHw-ISCII Malayalam
+AHw-57010+AHw-MakeEncoding.cs+AHw-ISCII Gujarati
+AHw-57011+AHw-MakeEncoding.cs+AHw-ISCII Punjabi
+AHw-65000+AHw magic +AHw-Unicode (UTF-7)
+AHw-65001+AHw magic +AHw-Unicode (UTF-8)
Note that MakeEncoding.cs deviates from unicode.org for some codepages. In the
case of direct conflicts, unicode.org takes precedence. In cases where the
unicode.org listing does not prescribe a value, MakeEncoding.cs value is used.
+ACMAIw Missing Codepages
The following codepages are not implemented. Normative references may not be
available in all cases. Furthermore, other software packages are known to hack
certain codepages (for example, Mozilla treats ASMO-708 as an alias of Arabic
ISO-8869-6 when in fact there are many differences), so all implementations
+ACo-should+ACo be cleanroom when possible.
- 709 Arabic (ASMO-449+-, BCON V4)
- 710 Arabic - Transparent Arabic
- 21027 (deprecated) +ADw--- is this necessary?
- 50229 ISO 2022 Traditional Chinese
- 50930 EBCDIC Japanese (Katakana) Extended
- 50931 EBCDIC US-Canada and Japanese
- 50933 EBCDIC Korean Extended and Korean
- 50935 EBCDIC Simplified Chinese Extended and Simplified Chinese
- 50936 EBCDIC Simplified Chinese
- 50937 EBCDIC US-Canada and Traditional Chinese
- 50939 EBCDIC Japanese (Latin) Extended and Japanese
- 51950 EUC Traditional Chinese
+ACMAIw Sources
- +AFs-Unicode Consortium Public Mappings+AF0(http://www.unicode.org/Public/MAPPINGS/)
- +AFs-Code Page Enumeration+AF0(http://msdn.microsoft.com/en-us/library/cc195051.aspx)
- +AFs-Code Page Identifiers+AF0(http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx)
+ACMAIw Badges
+AFsAIQBb-githalytics.com alpha+AF0(https://cruel-carlota.pagodabox.com/afa29a5e8495a01059ee5b353f9042cb +ACI-githalytics.com+ACI)+AF0(http://githalytics.com/SheetJS/js-codepage)
+AFsAIQBb-Build Status+AF0(https://travis-ci.org/SheetJS/js-codepage.svg?branch+AD0-master)+AF0(https://travis-ci.org/SheetJS/js-codepage)
+AFsAIQBb-Coverage Status+AF0(https://coveralls.io/repos/SheetJS/js-codepage/badge.png)+AF0(https://coveralls.io/r/SheetJS/js-codepage)