How to convert between codepages?
;==========================================================================================================================================
;
; How to convert between codepages?
; How to convert string content from one codepage to another codepage?
;
; Example for conversion from codepage 850 to 1252.
;
; (c)Detlev Dalitz.20100217.20100219.
;==========================================================================================================================================


; Set work folder to script folder.
DirChange (DirScript ())


;------------------------------------------------------------------------------------------------------------------------------------------;
; Step 1.
; We get the codepages from unicode.org, archived as text files.
;------------------------------------------------------------------------------------------------------------------------------------------;

strFileCPFrom = "CP850.txt" ; Filename for codepage from http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT
strFileCPTo = "CP1252.txt"  ; Filename for codepage from http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT

strURL_CP850 = "http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT"        ; URL for documentation of codepage 850.
strURL_CP1252 = "http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT" ; URL for documentation of codepage 1252.

AddExtender ("wwwsk44i.dll")

intHTTPResponse = httpRecvTextF (httpGetServer (strURL_CP850, ""), httpGetPath (strURL_CP850, ""), strFileCPFrom, 0)
;intHTTPResponse = 200 ; For testing.
Terminate (intHTTPResponse != 200, "Terminated.", "Download error" : @LF : "HTTP Response Code = " : intHTTPResponse : @LF : strURL_CP850)
Display (2, "HTTP Download", "Download success" : @LF : strURL_CP850 : @LF : @LF : "File created" : @LF : strFileCPFrom)

intHTTPResponse = httpRecvTextF (httpGetServer (strURL_CP1252, ""), httpGetPath (strURL_CP1252, ""), strFileCPTo, 0)
;intHTTPResponse = 200 ; For testing.
Terminate (intHTTPResponse != 200, "Terminated.", "Download error" : @LF : "HTTP Response Code = " : intHTTPResponse : @LF : strURL_CP1252)
Display (2, "HTTP Download", "Download success" : @LF : strURL_CP1252 : @LF : @LF : "File created" : @LF : strFileCPTo)


Drop (intHTTPResponse, strFileCPFrom, strFileCPTo, strURL_CP1252, strURL_CP850)


;------------------------------------------------------------------------------------------------------------------------------------------;
; Step 2.
; We create a conversion table.
; We use the byte value of the character based on codepage A as the index key
; which points to the value of the corresponding character in codepage B.
;
; Just for the demonstration we create both an array table and a binary table.
;------------------------------------------------------------------------------------------------------------------------------------------;

strFileCPFrom = "CP850.txt"                     ; Filename for codepage from http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT
strFileCPTo = "CP1252.txt"                      ; Filename for codepage from http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT

strFileConvTableCSV = "CP_850_1252.txt"         ; Output conversion table as CSV file including Unicode names.
strFileConvTableBin = "CP_850_1252.bin"         ; Output conversion table as 256-Byte binary file.

arrF = ArrayFileGetCSV (strFileCPFrom, 0, @TAB) ; Input array which contains the "from-table".
arrT = ArrayFileGetCSV (strFileCPTo, 0, @TAB)   ; Input array which contains the "to-table".

arrC = ArrDimension (256, 3)                    ; Output array which contains the conversion table.
                                                ; Column1 = CP_IN, Column2 = CP_OUT, Column3 = Unicode_Name
                                                ; Column1 is not really needed. It is just for better reading and understanding.
hdlBBC = BinaryAlloc (256)                      ; Output binary buffer which contains the conversion table.

hdlBB = BinaryAlloc (1)                         ; Buffer for hex to byte conversion.

intC = -1
intLastF = ArrInfo (arrF, 1) - 1
For intF = 0 To intLastF
   If StrIndex (arrF[intF, 0], "#", 1, @FWDSCAN) == 1 Then Continue
   arrR = ArrayLocate (arrT, arrF[intF, 2], 0, 2)
   intC = intC + 1
   If arrR[0] > -1
      BinaryPokeHex (hdlBB, 0, StrSub (arrT[arrR[0], 0], 3, -1))
      arrC[intC, 0] = intC
      arrC[intC, 1] = BinaryPeek (hdlBB, 0)
      arrC[intC, 2] = arrT[arrR[0], 2]
   Else
      arrC[intC, 0] = intC
      arrC[intC, 1] = intC
      arrC[intC, 2] = arrF[intF, 2]
   EndIf
   BinaryPoke (hdlBBC, intC, arrC[intC, 1])
   If intC > 254 Then Break
Next

hdlBB = BinaryFree (hdlBB)

; Write binary table to disk file for later usage.
intBytesWritten = BinaryWrite (hdlBBC, strFileConvTableBin)
hdlBBC = BinaryFree (hdlBBC)

; Write array table to disk file for later usage.
intBytesWritten = ArrayFilePutCSV (strFileConvTableCSV, arrC, @TAB, @FALSE, 2)

Drop (hdlBB, hdlBBC, arrC, arrF, arrR, arrT, intBytesWritten, intC, intF, intLastF)
Drop (strFileConvTableBin, strFileConvTableCSV, strFileCPFrom, strFileCPTo)


;------------------------------------------------------------------------------------------------------------------------------------------;
; Step 3.
; How to convert using the binary buffer conversion table?
;------------------------------------------------------------------------------------------------------------------------------------------;

strCP850Input = "123-abc-ABC-äöü-ÄÖÜ-Õ-ëóò"
hdlBBData = BinaryAlloc (StrLen (strCP850Input))
intBytesPoked = BinaryPokeStr (hdlBBData, 0, strCP850Input)

strFileConvTableBin = "CP_850_1252.bin"                     ; Conversion table as binary file ...
hdlBBTable = BinaryAlloc (256)                              ; ... to use with BinaryXlate function.
intBytesRead = BinaryRead (hdlBBTable, strFileConvTableBin)

intBBDataEod = BinaryXlate (hdlBBData, hdlBBTable, 0)       ; The conversion is done here.

strConverted = BinaryPeekStr (hdlBBData, 0, intBBDataEod)   ; "123-abc-ABC-õ÷³-ÄÍÜ-Õ-Ù¾ò"

hdlBBData = BinaryFree (hdlBBData)
hdlBBTable = BinaryFree (hdlBBTable)

Message ("Codepage conversion", "In:" : @LF : strCP850Input : @LF : @LF : "Out:" : @LF : strConverted)

Drop (hdlBBData, hdlBBTable, intBBDataEod, intBytesPoked, intBytesRead, strConverted, strCP850Input, strFileConvTableBin)


;------------------------------------------------------------------------------------------------------------------------------------------
; Step 4.
; How to convert using the array conversion table?
;------------------------------------------------------------------------------------------------------------------------------------------;

strCP850Input = "123-abc-ABC-äöü-ÄÖÜ-Õ-ëóò"
arrIn = ArrayFromStr (strCP850Input)
intLast = ArrInfo (arrIn, 1) - 1

strFileConvTableCSV = "CP_850_1252.txt"                     ; Conversion table as CSV file.
arrC = ArrayFileGetCSV (strFileConvTableCSV, 0, @TAB)       ; Conversion table to use with array lookup.

For intN = 0 To intLast
   arrIn[intN] = Num2Char (arrC[Char2Num (arrIn[intN]), 1]) ; The conversion is done here.
Next

strConverted = ArrayToStr (arrIn)                           ; "123-abc-ABC-õ÷³-ÄÍÜ-Õ-Ù¾ò"

Message ("Codepage conversion", "In:" : @LF : strCP850Input : @LF : @LF : "Out:" : @LF : strConverted)

Drop (arrIn, arrC, intLast, intN, strConverted, strCP850Input, strFileConvTableCSV)


:CANCEL
Exit
;==========================================================================================================================================



;==========================================================================================================================================
; The tables ...
;
;   CP850
;   CP1252
;   The created conversion table.
;
;==========================================================================================================================================
;   #
;   #    Name:     cp850_DOSLatin1 to Unicode table
;   #    Unicode version: 2.0
;   #    Table version: 2.00
;   #    Table format:  Format A
;   #    Date:          04/24/96
;   #    Contact: Shawn.Steele@microsoft.com
;   #
;   #    General notes: none
;   #
;   #    Format: Three tab-separated columns
;   #        Column #1 is the cp850_DOSLatin1 code (in hex)
;   #        Column #2 is the Unicode (in hex as 0xXXXX)
;   #        Column #3 is the Unicode name (follows a comment sign, '#')
;   #
;   #    The entries are in cp850_DOSLatin1 order
;   #
;   0x00   0x0000   #NULL
;   0x01   0x0001   #START OF HEADING
;   0x02   0x0002   #START OF TEXT
;   0x03   0x0003   #END OF TEXT
;   0x04   0x0004   #END OF TRANSMISSION
;   0x05   0x0005   #ENQUIRY
;   0x06   0x0006   #ACKNOWLEDGE
;   0x07   0x0007   #BELL
;   0x08   0x0008   #BACKSPACE
;   0x09   0x0009   #HORIZONTAL TABULATION
;   0x0a   0x000a   #LINE FEED
;   0x0b   0x000b   #VERTICAL TABULATION
;   0x0c   0x000c   #FORM FEED
;   0x0d   0x000d   #CARRIAGE RETURN
;   0x0e   0x000e   #SHIFT OUT
;   0x0f   0x000f   #SHIFT IN
;   0x10   0x0010   #DATA LINK ESCAPE
;   0x11   0x0011   #DEVICE CONTROL ONE
;   0x12   0x0012   #DEVICE CONTROL TWO
;   0x13   0x0013   #DEVICE CONTROL THREE
;   0x14   0x0014   #DEVICE CONTROL FOUR
;   0x15   0x0015   #NEGATIVE ACKNOWLEDGE
;   0x16   0x0016   #SYNCHRONOUS IDLE
;   0x17   0x0017   #END OF TRANSMISSION BLOCK
;   0x18   0x0018   #CANCEL
;   0x19   0x0019   #END OF MEDIUM
;   0x1a   0x001a   #SUBSTITUTE
;   0x1b   0x001b   #ESCAPE
;   0x1c   0x001c   #FILE SEPARATOR
;   0x1d   0x001d   #GROUP SEPARATOR
;   0x1e   0x001e   #RECORD SEPARATOR
;   0x1f   0x001f   #UNIT SEPARATOR
;   0x20   0x0020   #SPACE
;   0x21   0x0021   #EXCLAMATION MARK
;   0x22   0x0022   #QUOTATION MARK
;   0x23   0x0023   #NUMBER SIGN
;   0x24   0x0024   #DOLLAR SIGN
;   0x25   0x0025   #PERCENT SIGN
;   0x26   0x0026   #AMPERSAND
;   0x27   0x0027   #APOSTROPHE
;   0x28   0x0028   #LEFT PARENTHESIS
;   0x29   0x0029   #RIGHT PARENTHESIS
;   0x2a   0x002a   #ASTERISK
;   0x2b   0x002b   #PLUS SIGN
;   0x2c   0x002c   #COMMA
;   0x2d   0x002d   #HYPHEN-MINUS
;   0x2e   0x002e   #FULL STOP
;   0x2f   0x002f   #SOLIDUS
;   0x30   0x0030   #DIGIT ZERO
;   0x31   0x0031   #DIGIT ONE
;   0x32   0x0032   #DIGIT TWO
;   0x33   0x0033   #DIGIT THREE
;   0x34   0x0034   #DIGIT FOUR
;   0x35   0x0035   #DIGIT FIVE
;   0x36   0x0036   #DIGIT SIX
;   0x37   0x0037   #DIGIT SEVEN
;   0x38   0x0038   #DIGIT EIGHT
;   0x39   0x0039   #DIGIT NINE
;   0x3a   0x003a   #COLON
;   0x3b   0x003b   #SEMICOLON
;   0x3c   0x003c   #LESS-THAN SIGN
;   0x3d   0x003d   #EQUALS SIGN
;   0x3e   0x003e   #GREATER-THAN SIGN
;   0x3f   0x003f   #QUESTION MARK
;   0x40   0x0040   #COMMERCIAL AT
;   0x41   0x0041   #LATIN CAPITAL LETTER A
;   0x42   0x0042   #LATIN CAPITAL LETTER B
;   0x43   0x0043   #LATIN CAPITAL LETTER C
;   0x44   0x0044   #LATIN CAPITAL LETTER D
;   0x45   0x0045   #LATIN CAPITAL LETTER E
;   0x46   0x0046   #LATIN CAPITAL LETTER F
;   0x47   0x0047   #LATIN CAPITAL LETTER G
;   0x48   0x0048   #LATIN CAPITAL LETTER H
;   0x49   0x0049   #LATIN CAPITAL LETTER I
;   0x4a   0x004a   #LATIN CAPITAL LETTER J
;   0x4b   0x004b   #LATIN CAPITAL LETTER K
;   0x4c   0x004c   #LATIN CAPITAL LETTER L
;   0x4d   0x004d   #LATIN CAPITAL LETTER M
;   0x4e   0x004e   #LATIN CAPITAL LETTER N
;   0x4f   0x004f   #LATIN CAPITAL LETTER O
;   0x50   0x0050   #LATIN CAPITAL LETTER P
;   0x51   0x0051   #LATIN CAPITAL LETTER Q
;   0x52   0x0052   #LATIN CAPITAL LETTER R
;   0x53   0x0053   #LATIN CAPITAL LETTER S
;   0x54   0x0054   #LATIN CAPITAL LETTER T
;   0x55   0x0055   #LATIN CAPITAL LETTER U
;   0x56   0x0056   #LATIN CAPITAL LETTER V
;   0x57   0x0057   #LATIN CAPITAL LETTER W
;   0x58   0x0058   #LATIN CAPITAL LETTER X
;   0x59   0x0059   #LATIN CAPITAL LETTER Y
;   0x5a   0x005a   #LATIN CAPITAL LETTER Z
;   0x5b   0x005b   #LEFT SQUARE BRACKET
;   0x5c   0x005c   #REVERSE SOLIDUS
;   0x5d   0x005d   #RIGHT SQUARE BRACKET
;   0x5e   0x005e   #CIRCUMFLEX ACCENT
;   0x5f   0x005f   #LOW LINE
;   0x60   0x0060   #GRAVE ACCENT
;   0x61   0x0061   #LATIN SMALL LETTER A
;   0x62   0x0062   #LATIN SMALL LETTER B
;   0x63   0x0063   #LATIN SMALL LETTER C
;   0x64   0x0064   #LATIN SMALL LETTER D
;   0x65   0x0065   #LATIN SMALL LETTER E
;   0x66   0x0066   #LATIN SMALL LETTER F
;   0x67   0x0067   #LATIN SMALL LETTER G
;   0x68   0x0068   #LATIN SMALL LETTER H
;   0x69   0x0069   #LATIN SMALL LETTER I
;   0x6a   0x006a   #LATIN SMALL LETTER J
;   0x6b   0x006b   #LATIN SMALL LETTER K
;   0x6c   0x006c   #LATIN SMALL LETTER L
;   0x6d   0x006d   #LATIN SMALL LETTER M
;   0x6e   0x006e   #LATIN SMALL LETTER N
;   0x6f   0x006f   #LATIN SMALL LETTER O
;   0x70   0x0070   #LATIN SMALL LETTER P
;   0x71   0x0071   #LATIN SMALL LETTER Q
;   0x72   0x0072   #LATIN SMALL LETTER R
;   0x73   0x0073   #LATIN SMALL LETTER S
;   0x74   0x0074   #LATIN SMALL LETTER T
;   0x75   0x0075   #LATIN SMALL LETTER U
;   0x76   0x0076   #LATIN SMALL LETTER V
;   0x77   0x0077   #LATIN SMALL LETTER W
;   0x78   0x0078   #LATIN SMALL LETTER X
;   0x79   0x0079   #LATIN SMALL LETTER Y
;   0x7a   0x007a   #LATIN SMALL LETTER Z
;   0x7b   0x007b   #LEFT CURLY BRACKET
;   0x7c   0x007c   #VERTICAL LINE
;   0x7d   0x007d   #RIGHT CURLY BRACKET
;   0x7e   0x007e   #TILDE
;   0x7f   0x007f   #DELETE
;   0x80   0x00c7   #LATIN CAPITAL LETTER C WITH CEDILLA
;   0x81   0x00fc   #LATIN SMALL LETTER U WITH DIAERESIS
;   0x82   0x00e9   #LATIN SMALL LETTER E WITH ACUTE
;   0x83   0x00e2   #LATIN SMALL LETTER A WITH CIRCUMFLEX
;   0x84   0x00e4   #LATIN SMALL LETTER A WITH DIAERESIS
;   0x85   0x00e0   #LATIN SMALL LETTER A WITH GRAVE
;   0x86   0x00e5   #LATIN SMALL LETTER A WITH RING ABOVE
;   0x87   0x00e7   #LATIN SMALL LETTER C WITH CEDILLA
;   0x88   0x00ea   #LATIN SMALL LETTER E WITH CIRCUMFLEX
;   0x89   0x00eb   #LATIN SMALL LETTER E WITH DIAERESIS
;   0x8a   0x00e8   #LATIN SMALL LETTER E WITH GRAVE
;   0x8b   0x00ef   #LATIN SMALL LETTER I WITH DIAERESIS
;   0x8c   0x00ee   #LATIN SMALL LETTER I WITH CIRCUMFLEX
;   0x8d   0x00ec   #LATIN SMALL LETTER I WITH GRAVE
;   0x8e   0x00c4   #LATIN CAPITAL LETTER A WITH DIAERESIS
;   0x8f   0x00c5   #LATIN CAPITAL LETTER A WITH RING ABOVE
;   0x90   0x00c9   #LATIN CAPITAL LETTER E WITH ACUTE
;   0x91   0x00e6   #LATIN SMALL LIGATURE AE
;   0x92   0x00c6   #LATIN CAPITAL LIGATURE AE
;   0x93   0x00f4   #LATIN SMALL LETTER O WITH CIRCUMFLEX
;   0x94   0x00f6   #LATIN SMALL LETTER O WITH DIAERESIS
;   0x95   0x00f2   #LATIN SMALL LETTER O WITH GRAVE
;   0x96   0x00fb   #LATIN SMALL LETTER U WITH CIRCUMFLEX
;   0x97   0x00f9   #LATIN SMALL LETTER U WITH GRAVE
;   0x98   0x00ff   #LATIN SMALL LETTER Y WITH DIAERESIS
;   0x99   0x00d6   #LATIN CAPITAL LETTER O WITH DIAERESIS
;   0x9a   0x00dc   #LATIN CAPITAL LETTER U WITH DIAERESIS
;   0x9b   0x00f8   #LATIN SMALL LETTER O WITH STROKE
;   0x9c   0x00a3   #POUND SIGN
;   0x9d   0x00d8   #LATIN CAPITAL LETTER O WITH STROKE
;   0x9e   0x00d7   #MULTIPLICATION SIGN
;   0x9f   0x0192   #LATIN SMALL LETTER F WITH HOOK
;   0xa0   0x00e1   #LATIN SMALL LETTER A WITH ACUTE
;   0xa1   0x00ed   #LATIN SMALL LETTER I WITH ACUTE
;   0xa2   0x00f3   #LATIN SMALL LETTER O WITH ACUTE
;   0xa3   0x00fa   #LATIN SMALL LETTER U WITH ACUTE
;   0xa4   0x00f1   #LATIN SMALL LETTER N WITH TILDE
;   0xa5   0x00d1   #LATIN CAPITAL LETTER N WITH TILDE
;   0xa6   0x00aa   #FEMININE ORDINAL INDICATOR
;   0xa7   0x00ba   #MASCULINE ORDINAL INDICATOR
;   0xa8   0x00bf   #INVERTED QUESTION MARK
;   0xa9   0x00ae   #REGISTERED SIGN
;   0xaa   0x00ac   #NOT SIGN
;   0xab   0x00bd   #VULGAR FRACTION ONE HALF
;   0xac   0x00bc   #VULGAR FRACTION ONE QUARTER
;   0xad   0x00a1   #INVERTED EXCLAMATION MARK
;   0xae   0x00ab   #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
;   0xaf   0x00bb   #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
;   0xb0   0x2591   #LIGHT SHADE
;   0xb1   0x2592   #MEDIUM SHADE
;   0xb2   0x2593   #DARK SHADE
;   0xb3   0x2502   #BOX DRAWINGS LIGHT VERTICAL
;   0xb4   0x2524   #BOX DRAWINGS LIGHT VERTICAL AND LEFT
;   0xb5   0x00c1   #LATIN CAPITAL LETTER A WITH ACUTE
;   0xb6   0x00c2   #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
;   0xb7   0x00c0   #LATIN CAPITAL LETTER A WITH GRAVE
;   0xb8   0x00a9   #COPYRIGHT SIGN
;   0xb9   0x2563   #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
;   0xba   0x2551   #BOX DRAWINGS DOUBLE VERTICAL
;   0xbb   0x2557   #BOX DRAWINGS DOUBLE DOWN AND LEFT
;   0xbc   0x255d   #BOX DRAWINGS DOUBLE UP AND LEFT
;   0xbd   0x00a2   #CENT SIGN
;   0xbe   0x00a5   #YEN SIGN
;   0xbf   0x2510   #BOX DRAWINGS LIGHT DOWN AND LEFT
;   0xc0   0x2514   #BOX DRAWINGS LIGHT UP AND RIGHT
;   0xc1   0x2534   #BOX DRAWINGS LIGHT UP AND HORIZONTAL
;   0xc2   0x252c   #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
;   0xc3   0x251c   #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
;   0xc4   0x2500   #BOX DRAWINGS LIGHT HORIZONTAL
;   0xc5   0x253c   #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
;   0xc6   0x00e3   #LATIN SMALL LETTER A WITH TILDE
;   0xc7   0x00c3   #LATIN CAPITAL LETTER A WITH TILDE
;   0xc8   0x255a   #BOX DRAWINGS DOUBLE UP AND RIGHT
;   0xc9   0x2554   #BOX DRAWINGS DOUBLE DOWN AND RIGHT
;   0xca   0x2569   #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
;   0xcb   0x2566   #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
;   0xcc   0x2560   #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
;   0xcd   0x2550   #BOX DRAWINGS DOUBLE HORIZONTAL
;   0xce   0x256c   #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
;   0xcf   0x00a4   #CURRENCY SIGN
;   0xd0   0x00f0   #LATIN SMALL LETTER ETH
;   0xd1   0x00d0   #LATIN CAPITAL LETTER ETH
;   0xd2   0x00ca   #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
;   0xd3   0x00cb   #LATIN CAPITAL LETTER E WITH DIAERESIS
;   0xd4   0x00c8   #LATIN CAPITAL LETTER E WITH GRAVE
;   0xd5   0x0131   #LATIN SMALL LETTER DOTLESS I
;   0xd6   0x00cd   #LATIN CAPITAL LETTER I WITH ACUTE
;   0xd7   0x00ce   #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
;   0xd8   0x00cf   #LATIN CAPITAL LETTER I WITH DIAERESIS
;   0xd9   0x2518   #BOX DRAWINGS LIGHT UP AND LEFT
;   0xda   0x250c   #BOX DRAWINGS LIGHT DOWN AND RIGHT
;   0xdb   0x2588   #FULL BLOCK
;   0xdc   0x2584   #LOWER HALF BLOCK
;   0xdd   0x00a6   #BROKEN BAR
;   0xde   0x00cc   #LATIN CAPITAL LETTER I WITH GRAVE
;   0xdf   0x2580   #UPPER HALF BLOCK
;   0xe0   0x00d3   #LATIN CAPITAL LETTER O WITH ACUTE
;   0xe1   0x00df   #LATIN SMALL LETTER SHARP S
;   0xe2   0x00d4   #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
;   0xe3   0x00d2   #LATIN CAPITAL LETTER O WITH GRAVE
;   0xe4   0x00f5   #LATIN SMALL LETTER O WITH TILDE
;   0xe5   0x00d5   #LATIN CAPITAL LETTER O WITH TILDE
;   0xe6   0x00b5   #MICRO SIGN
;   0xe7   0x00fe   #LATIN SMALL LETTER THORN
;   0xe8   0x00de   #LATIN CAPITAL LETTER THORN
;   0xe9   0x00da   #LATIN CAPITAL LETTER U WITH ACUTE
;   0xea   0x00db   #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
;   0xeb   0x00d9   #LATIN CAPITAL LETTER U WITH GRAVE
;   0xec   0x00fd   #LATIN SMALL LETTER Y WITH ACUTE
;   0xed   0x00dd   #LATIN CAPITAL LETTER Y WITH ACUTE
;   0xee   0x00af   #MACRON
;   0xef   0x00b4   #ACUTE ACCENT
;   0xf0   0x00ad   #SOFT HYPHEN
;   0xf1   0x00b1   #PLUS-MINUS SIGN
;   0xf2   0x2017   #DOUBLE LOW LINE
;   0xf3   0x00be   #VULGAR FRACTION THREE QUARTERS
;   0xf4   0x00b6   #PILCROW SIGN
;   0xf5   0x00a7   #SECTION SIGN
;   0xf6   0x00f7   #DIVISION SIGN
;   0xf7   0x00b8   #CEDILLA
;   0xf8   0x00b0   #DEGREE SIGN
;   0xf9   0x00a8   #DIAERESIS
;   0xfa   0x00b7   #MIDDLE DOT
;   0xfb   0x00b9   #SUPERSCRIPT ONE
;   0xfc   0x00b3   #SUPERSCRIPT THREE
;   0xfd   0x00b2   #SUPERSCRIPT TWO
;   0xfe   0x25a0   #BLACK SQUARE
;   0xff   0x00a0   #NO-BREAK SPACE
;==========================================================================================================================================
;   #
;   #    Name:     cp1252 to Unicode table
;   #    Unicode version: 2.0
;   #    Table version: 2.01
;   #    Table format:  Format A
;   #    Date:          04/15/98
;   #
;   #    Contact:       Shawn.Steele@microsoft.com
;   #
;   #    General notes: none
;   #
;   #    Format: Three tab-separated columns
;   #        Column #1 is the cp1252 code (in hex)
;   #        Column #2 is the Unicode (in hex as 0xXXXX)
;   #        Column #3 is the Unicode name (follows a comment sign, '#')
;   #
;   #    The entries are in cp1252 order
;   #
;   0x00   0x0000   #NULL
;   0x01   0x0001   #START OF HEADING
;   0x02   0x0002   #START OF TEXT
;   0x03   0x0003   #END OF TEXT
;   0x04   0x0004   #END OF TRANSMISSION
;   0x05   0x0005   #ENQUIRY
;   0x06   0x0006   #ACKNOWLEDGE
;   0x07   0x0007   #BELL
;   0x08   0x0008   #BACKSPACE
;   0x09   0x0009   #HORIZONTAL TABULATION
;   0x0A   0x000A   #LINE FEED
;   0x0B   0x000B   #VERTICAL TABULATION
;   0x0C   0x000C   #FORM FEED
;   0x0D   0x000D   #CARRIAGE RETURN
;   0x0E   0x000E   #SHIFT OUT
;   0x0F   0x000F   #SHIFT IN
;   0x10   0x0010   #DATA LINK ESCAPE
;   0x11   0x0011   #DEVICE CONTROL ONE
;   0x12   0x0012   #DEVICE CONTROL TWO
;   0x13   0x0013   #DEVICE CONTROL THREE
;   0x14   0x0014   #DEVICE CONTROL FOUR
;   0x15   0x0015   #NEGATIVE ACKNOWLEDGE
;   0x16   0x0016   #SYNCHRONOUS IDLE
;   0x17   0x0017   #END OF TRANSMISSION BLOCK
;   0x18   0x0018   #CANCEL
;   0x19   0x0019   #END OF MEDIUM
;   0x1A   0x001A   #SUBSTITUTE
;   0x1B   0x001B   #ESCAPE
;   0x1C   0x001C   #FILE SEPARATOR
;   0x1D   0x001D   #GROUP SEPARATOR
;   0x1E   0x001E   #RECORD SEPARATOR
;   0x1F   0x001F   #UNIT SEPARATOR
;   0x20   0x0020   #SPACE
;   0x21   0x0021   #EXCLAMATION MARK
;   0x22   0x0022   #QUOTATION MARK
;   0x23   0x0023   #NUMBER SIGN
;   0x24   0x0024   #DOLLAR SIGN
;   0x25   0x0025   #PERCENT SIGN
;   0x26   0x0026   #AMPERSAND
;   0x27   0x0027   #APOSTROPHE
;   0x28   0x0028   #LEFT PARENTHESIS
;   0x29   0x0029   #RIGHT PARENTHESIS
;   0x2A   0x002A   #ASTERISK
;   0x2B   0x002B   #PLUS SIGN
;   0x2C   0x002C   #COMMA
;   0x2D   0x002D   #HYPHEN-MINUS
;   0x2E   0x002E   #FULL STOP
;   0x2F   0x002F   #SOLIDUS
;   0x30   0x0030   #DIGIT ZERO
;   0x31   0x0031   #DIGIT ONE
;   0x32   0x0032   #DIGIT TWO
;   0x33   0x0033   #DIGIT THREE
;   0x34   0x0034   #DIGIT FOUR
;   0x35   0x0035   #DIGIT FIVE
;   0x36   0x0036   #DIGIT SIX
;   0x37   0x0037   #DIGIT SEVEN
;   0x38   0x0038   #DIGIT EIGHT
;   0x39   0x0039   #DIGIT NINE
;   0x3A   0x003A   #COLON
;   0x3B   0x003B   #SEMICOLON
;   0x3C   0x003C   #LESS-THAN SIGN
;   0x3D   0x003D   #EQUALS SIGN
;   0x3E   0x003E   #GREATER-THAN SIGN
;   0x3F   0x003F   #QUESTION MARK
;   0x40   0x0040   #COMMERCIAL AT
;   0x41   0x0041   #LATIN CAPITAL LETTER A
;   0x42   0x0042   #LATIN CAPITAL LETTER B
;   0x43   0x0043   #LATIN CAPITAL LETTER C
;   0x44   0x0044   #LATIN CAPITAL LETTER D
;   0x45   0x0045   #LATIN CAPITAL LETTER E
;   0x46   0x0046   #LATIN CAPITAL LETTER F
;   0x47   0x0047   #LATIN CAPITAL LETTER G
;   0x48   0x0048   #LATIN CAPITAL LETTER H
;   0x49   0x0049   #LATIN CAPITAL LETTER I
;   0x4A   0x004A   #LATIN CAPITAL LETTER J
;   0x4B   0x004B   #LATIN CAPITAL LETTER K
;   0x4C   0x004C   #LATIN CAPITAL LETTER L
;   0x4D   0x004D   #LATIN CAPITAL LETTER M
;   0x4E   0x004E   #LATIN CAPITAL LETTER N
;   0x4F   0x004F   #LATIN CAPITAL LETTER O
;   0x50   0x0050   #LATIN CAPITAL LETTER P
;   0x51   0x0051   #LATIN CAPITAL LETTER Q
;   0x52   0x0052   #LATIN CAPITAL LETTER R
;   0x53   0x0053   #LATIN CAPITAL LETTER S
;   0x54   0x0054   #LATIN CAPITAL LETTER T
;   0x55   0x0055   #LATIN CAPITAL LETTER U
;   0x56   0x0056   #LATIN CAPITAL LETTER V
;   0x57   0x0057   #LATIN CAPITAL LETTER W
;   0x58   0x0058   #LATIN CAPITAL LETTER X
;   0x59   0x0059   #LATIN CAPITAL LETTER Y
;   0x5A   0x005A   #LATIN CAPITAL LETTER Z
;   0x5B   0x005B   #LEFT SQUARE BRACKET
;   0x5C   0x005C   #REVERSE SOLIDUS
;   0x5D   0x005D   #RIGHT SQUARE BRACKET
;   0x5E   0x005E   #CIRCUMFLEX ACCENT
;   0x5F   0x005F   #LOW LINE
;   0x60   0x0060   #GRAVE ACCENT
;   0x61   0x0061   #LATIN SMALL LETTER A
;   0x62   0x0062   #LATIN SMALL LETTER B
;   0x63   0x0063   #LATIN SMALL LETTER C
;   0x64   0x0064   #LATIN SMALL LETTER D
;   0x65   0x0065   #LATIN SMALL LETTER E
;   0x66   0x0066   #LATIN SMALL LETTER F
;   0x67   0x0067   #LATIN SMALL LETTER G
;   0x68   0x0068   #LATIN SMALL LETTER H
;   0x69   0x0069   #LATIN SMALL LETTER I
;   0x6A   0x006A   #LATIN SMALL LETTER J
;   0x6B   0x006B   #LATIN SMALL LETTER K
;   0x6C   0x006C   #LATIN SMALL LETTER L
;   0x6D   0x006D   #LATIN SMALL LETTER M
;   0x6E   0x006E   #LATIN SMALL LETTER N
;   0x6F   0x006F   #LATIN SMALL LETTER O
;   0x70   0x0070   #LATIN SMALL LETTER P
;   0x71   0x0071   #LATIN SMALL LETTER Q
;   0x72   0x0072   #LATIN SMALL LETTER R
;   0x73   0x0073   #LATIN SMALL LETTER S
;   0x74   0x0074   #LATIN SMALL LETTER T
;   0x75   0x0075   #LATIN SMALL LETTER U
;   0x76   0x0076   #LATIN SMALL LETTER V
;   0x77   0x0077   #LATIN SMALL LETTER W
;   0x78   0x0078   #LATIN SMALL LETTER X
;   0x79   0x0079   #LATIN SMALL LETTER Y
;   0x7A   0x007A   #LATIN SMALL LETTER Z
;   0x7B   0x007B   #LEFT CURLY BRACKET
;   0x7C   0x007C   #VERTICAL LINE
;   0x7D   0x007D   #RIGHT CURLY BRACKET
;   0x7E   0x007E   #TILDE
;   0x7F   0x007F   #DELETE
;   0x80   0x20AC   #EURO SIGN
;   0x81            #UNDEFINED
;   0x82   0x201A   #SINGLE LOW-9 QUOTATION MARK
;   0x83   0x0192   #LATIN SMALL LETTER F WITH HOOK
;   0x84   0x201E   #DOUBLE LOW-9 QUOTATION MARK
;   0x85   0x2026   #HORIZONTAL ELLIPSIS
;   0x86   0x2020   #DAGGER
;   0x87   0x2021   #DOUBLE DAGGER
;   0x88   0x02C6   #MODIFIER LETTER CIRCUMFLEX ACCENT
;   0x89   0x2030   #PER MILLE SIGN
;   0x8A   0x0160   #LATIN CAPITAL LETTER S WITH CARON
;   0x8B   0x2039   #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
;   0x8C   0x0152   #LATIN CAPITAL LIGATURE OE
;   0x8D            #UNDEFINED
;   0x8E   0x017D   #LATIN CAPITAL LETTER Z WITH CARON
;   0x8F            #UNDEFINED
;   0x90            #UNDEFINED
;   0x91   0x2018   #LEFT SINGLE QUOTATION MARK
;   0x92   0x2019   #RIGHT SINGLE QUOTATION MARK
;   0x93   0x201C   #LEFT DOUBLE QUOTATION MARK
;   0x94   0x201D   #RIGHT DOUBLE QUOTATION MARK
;   0x95   0x2022   #BULLET
;   0x96   0x2013   #EN DASH
;   0x97   0x2014   #EM DASH
;   0x98   0x02DC   #SMALL TILDE
;   0x99   0x2122   #TRADE MARK SIGN
;   0x9A   0x0161   #LATIN SMALL LETTER S WITH CARON
;   0x9B   0x203A   #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
;   0x9C   0x0153   #LATIN SMALL LIGATURE OE
;   0x9D            #UNDEFINED
;   0x9E   0x017E   #LATIN SMALL LETTER Z WITH CARON
;   0x9F   0x0178   #LATIN CAPITAL LETTER Y WITH DIAERESIS
;   0xA0   0x00A0   #NO-BREAK SPACE
;   0xA1   0x00A1   #INVERTED EXCLAMATION MARK
;   0xA2   0x00A2   #CENT SIGN
;   0xA3   0x00A3   #POUND SIGN
;   0xA4   0x00A4   #CURRENCY SIGN
;   0xA5   0x00A5   #YEN SIGN
;   0xA6   0x00A6   #BROKEN BAR
;   0xA7   0x00A7   #SECTION SIGN
;   0xA8   0x00A8   #DIAERESIS
;   0xA9   0x00A9   #COPYRIGHT SIGN
;   0xAA   0x00AA   #FEMININE ORDINAL INDICATOR
;   0xAB   0x00AB   #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
;   0xAC   0x00AC   #NOT SIGN
;   0xAD   0x00AD   #SOFT HYPHEN
;   0xAE   0x00AE   #REGISTERED SIGN
;   0xAF   0x00AF   #MACRON
;   0xB0   0x00B0   #DEGREE SIGN
;   0xB1   0x00B1   #PLUS-MINUS SIGN
;   0xB2   0x00B2   #SUPERSCRIPT TWO
;   0xB3   0x00B3   #SUPERSCRIPT THREE
;   0xB4   0x00B4   #ACUTE ACCENT
;   0xB5   0x00B5   #MICRO SIGN
;   0xB6   0x00B6   #PILCROW SIGN
;   0xB7   0x00B7   #MIDDLE DOT
;   0xB8   0x00B8   #CEDILLA
;   0xB9   0x00B9   #SUPERSCRIPT ONE
;   0xBA   0x00BA   #MASCULINE ORDINAL INDICATOR
;   0xBB   0x00BB   #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
;   0xBC   0x00BC   #VULGAR FRACTION ONE QUARTER
;   0xBD   0x00BD   #VULGAR FRACTION ONE HALF
;   0xBE   0x00BE   #VULGAR FRACTION THREE QUARTERS
;   0xBF   0x00BF   #INVERTED QUESTION MARK
;   0xC0   0x00C0   #LATIN CAPITAL LETTER A WITH GRAVE
;   0xC1   0x00C1   #LATIN CAPITAL LETTER A WITH ACUTE
;   0xC2   0x00C2   #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
;   0xC3   0x00C3   #LATIN CAPITAL LETTER A WITH TILDE
;   0xC4   0x00C4   #LATIN CAPITAL LETTER A WITH DIAERESIS
;   0xC5   0x00C5   #LATIN CAPITAL LETTER A WITH RING ABOVE
;   0xC6   0x00C6   #LATIN CAPITAL LETTER AE
;   0xC7   0x00C7   #LATIN CAPITAL LETTER C WITH CEDILLA
;   0xC8   0x00C8   #LATIN CAPITAL LETTER E WITH GRAVE
;   0xC9   0x00C9   #LATIN CAPITAL LETTER E WITH ACUTE
;   0xCA   0x00CA   #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
;   0xCB   0x00CB   #LATIN CAPITAL LETTER E WITH DIAERESIS
;   0xCC   0x00CC   #LATIN CAPITAL LETTER I WITH GRAVE
;   0xCD   0x00CD   #LATIN CAPITAL LETTER I WITH ACUTE
;   0xCE   0x00CE   #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
;   0xCF   0x00CF   #LATIN CAPITAL LETTER I WITH DIAERESIS
;   0xD0   0x00D0   #LATIN CAPITAL LETTER ETH
;   0xD1   0x00D1   #LATIN CAPITAL LETTER N WITH TILDE
;   0xD2   0x00D2   #LATIN CAPITAL LETTER O WITH GRAVE
;   0xD3   0x00D3   #LATIN CAPITAL LETTER O WITH ACUTE
;   0xD4   0x00D4   #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
;   0xD5   0x00D5   #LATIN CAPITAL LETTER O WITH TILDE
;   0xD6   0x00D6   #LATIN CAPITAL LETTER O WITH DIAERESIS
;   0xD7   0x00D7   #MULTIPLICATION SIGN
;   0xD8   0x00D8   #LATIN CAPITAL LETTER O WITH STROKE
;   0xD9   0x00D9   #LATIN CAPITAL LETTER U WITH GRAVE
;   0xDA   0x00DA   #LATIN CAPITAL LETTER U WITH ACUTE
;   0xDB   0x00DB   #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
;   0xDC   0x00DC   #LATIN CAPITAL LETTER U WITH DIAERESIS
;   0xDD   0x00DD   #LATIN CAPITAL LETTER Y WITH ACUTE
;   0xDE   0x00DE   #LATIN CAPITAL LETTER THORN
;   0xDF   0x00DF   #LATIN SMALL LETTER SHARP S
;   0xE0   0x00E0   #LATIN SMALL LETTER A WITH GRAVE
;   0xE1   0x00E1   #LATIN SMALL LETTER A WITH ACUTE
;   0xE2   0x00E2   #LATIN SMALL LETTER A WITH CIRCUMFLEX
;   0xE3   0x00E3   #LATIN SMALL LETTER A WITH TILDE
;   0xE4   0x00E4   #LATIN SMALL LETTER A WITH DIAERESIS
;   0xE5   0x00E5   #LATIN SMALL LETTER A WITH RING ABOVE
;   0xE6   0x00E6   #LATIN SMALL LETTER AE
;   0xE7   0x00E7   #LATIN SMALL LETTER C WITH CEDILLA
;   0xE8   0x00E8   #LATIN SMALL LETTER E WITH GRAVE
;   0xE9   0x00E9   #LATIN SMALL LETTER E WITH ACUTE
;   0xEA   0x00EA   #LATIN SMALL LETTER E WITH CIRCUMFLEX
;   0xEB   0x00EB   #LATIN SMALL LETTER E WITH DIAERESIS
;   0xEC   0x00EC   #LATIN SMALL LETTER I WITH GRAVE
;   0xED   0x00ED   #LATIN SMALL LETTER I WITH ACUTE
;   0xEE   0x00EE   #LATIN SMALL LETTER I WITH CIRCUMFLEX
;   0xEF   0x00EF   #LATIN SMALL LETTER I WITH DIAERESIS
;   0xF0   0x00F0   #LATIN SMALL LETTER ETH
;   0xF1   0x00F1   #LATIN SMALL LETTER N WITH TILDE
;   0xF2   0x00F2   #LATIN SMALL LETTER O WITH GRAVE
;   0xF3   0x00F3   #LATIN SMALL LETTER O WITH ACUTE
;   0xF4   0x00F4   #LATIN SMALL LETTER O WITH CIRCUMFLEX
;   0xF5   0x00F5   #LATIN SMALL LETTER O WITH TILDE
;   0xF6   0x00F6   #LATIN SMALL LETTER O WITH DIAERESIS
;   0xF7   0x00F7   #DIVISION SIGN
;   0xF8   0x00F8   #LATIN SMALL LETTER O WITH STROKE
;   0xF9   0x00F9   #LATIN SMALL LETTER U WITH GRAVE
;   0xFA   0x00FA   #LATIN SMALL LETTER U WITH ACUTE
;   0xFB   0x00FB   #LATIN SMALL LETTER U WITH CIRCUMFLEX
;   0xFC   0x00FC   #LATIN SMALL LETTER U WITH DIAERESIS
;   0xFD   0x00FD   #LATIN SMALL LETTER Y WITH ACUTE
;   0xFE   0x00FE   #LATIN SMALL LETTER THORN
;   0xFF   0x00FF   #LATIN SMALL LETTER Y WITH DIAERESIS
;==========================================================================================================================================
;   #
;   #    Name:     cp850 to cp1252 conversion table
;   #
;   #    Table version: 1.00
;   #    Date:          2010-02-18
;   #
;   #    Contact:       dd@hpdd.de
;   #
;   #    Format: Three tab-separated columns
;   #        Column #1 is the cp850 code (in decimal)
;   #        Column #2 is the cp1252 code (in decimal)
;   #        Column #3 is the Unicode name (follows a comment sign, '#')
;   #
;   #    The entries are in cp850 order
;   #
;   0  0  #NULL
;   1  1  #START OF HEADING
;   2  2  #START OF TEXT
;   3  3  #END OF TEXT
;   4  4  #END OF TRANSMISSION
;   5  5  #ENQUIRY
;   6  6  #ACKNOWLEDGE
;   7  7  #BELL
;   8  8  #BACKSPACE
;   9  9  #HORIZONTAL TABULATION
;   10 10 #LINE FEED
;   11 11 #VERTICAL TABULATION
;   12 12 #FORM FEED
;   13 13 #CARRIAGE RETURN
;   14 14 #SHIFT OUT
;   15 15 #SHIFT IN
;   16 16 #DATA LINK ESCAPE
;   17 17 #DEVICE CONTROL ONE
;   18 18 #DEVICE CONTROL TWO
;   19 19 #DEVICE CONTROL THREE
;   20 20 #DEVICE CONTROL FOUR
;   21 21 #NEGATIVE ACKNOWLEDGE
;   22 22 #SYNCHRONOUS IDLE
;   23 23 #END OF TRANSMISSION BLOCK
;   24 24 #CANCEL
;   25 25 #END OF MEDIUM
;   26 26 #SUBSTITUTE
;   27 27 #ESCAPE
;   28 28 #FILE SEPARATOR
;   29 29 #GROUP SEPARATOR
;   30 30 #RECORD SEPARATOR
;   31 31 #UNIT SEPARATOR
;   32 32 #SPACE
;   33 33 #EXCLAMATION MARK
;   34 34 #QUOTATION MARK
;   35 35 #NUMBER SIGN
;   36 36 #DOLLAR SIGN
;   37 37 #PERCENT SIGN
;   38 38 #AMPERSAND
;   39 39 #APOSTROPHE
;   40 40 #LEFT PARENTHESIS
;   41 41 #RIGHT PARENTHESIS
;   42 42 #ASTERISK
;   43 43 #PLUS SIGN
;   44 44 #COMMA
;   45 45 #HYPHEN-MINUS
;   46 46 #FULL STOP
;   47 47 #SOLIDUS
;   48 48 #DIGIT ZERO
;   49 49 #DIGIT ONE
;   50 50 #DIGIT TWO
;   51 51 #DIGIT THREE
;   52 52 #DIGIT FOUR
;   53 53 #DIGIT FIVE
;   54 54 #DIGIT SIX
;   55 55 #DIGIT SEVEN
;   56 56 #DIGIT EIGHT
;   57 57 #DIGIT NINE
;   58 58 #COLON
;   59 59 #SEMICOLON
;   60 60 #LESS-THAN SIGN
;   61 61 #EQUALS SIGN
;   62 62 #GREATER-THAN SIGN
;   63 63 #QUESTION MARK
;   64 64 #COMMERCIAL AT
;   65 65 #LATIN CAPITAL LETTER A
;   66 66 #LATIN CAPITAL LETTER B
;   67 67 #LATIN CAPITAL LETTER C
;   68 68 #LATIN CAPITAL LETTER D
;   69 69 #LATIN CAPITAL LETTER E
;   70 70 #LATIN CAPITAL LETTER F
;   71 71 #LATIN CAPITAL LETTER G
;   72 72 #LATIN CAPITAL LETTER H
;   73 73 #LATIN CAPITAL LETTER I
;   74 74 #LATIN CAPITAL LETTER J
;   75 75 #LATIN CAPITAL LETTER K
;   76 76 #LATIN CAPITAL LETTER L
;   77 77 #LATIN CAPITAL LETTER M
;   78 78 #LATIN CAPITAL LETTER N
;   79 79 #LATIN CAPITAL LETTER O
;   80 80 #LATIN CAPITAL LETTER P
;   81 81 #LATIN CAPITAL LETTER Q
;   82 82 #LATIN CAPITAL LETTER R
;   83 83 #LATIN CAPITAL LETTER S
;   84 84 #LATIN CAPITAL LETTER T
;   85 85 #LATIN CAPITAL LETTER U
;   86 86 #LATIN CAPITAL LETTER V
;   87 87 #LATIN CAPITAL LETTER W
;   88 88 #LATIN CAPITAL LETTER X
;   89 89 #LATIN CAPITAL LETTER Y
;   90 90 #LATIN CAPITAL LETTER Z
;   91 91 #LEFT SQUARE BRACKET
;   92 92 #REVERSE SOLIDUS
;   93 93 #RIGHT SQUARE BRACKET
;   94 94 #CIRCUMFLEX ACCENT
;   95 95 #LOW LINE
;   96 96 #GRAVE ACCENT
;   97 97 #LATIN SMALL LETTER A
;   98 98 #LATIN SMALL LETTER B
;   99 99 #LATIN SMALL LETTER C
;   100   100   #LATIN SMALL LETTER D
;   101   101   #LATIN SMALL LETTER E
;   102   102   #LATIN SMALL LETTER F
;   103   103   #LATIN SMALL LETTER G
;   104   104   #LATIN SMALL LETTER H
;   105   105   #LATIN SMALL LETTER I
;   106   106   #LATIN SMALL LETTER J
;   107   107   #LATIN SMALL LETTER K
;   108   108   #LATIN SMALL LETTER L
;   109   109   #LATIN SMALL LETTER M
;   110   110   #LATIN SMALL LETTER N
;   111   111   #LATIN SMALL LETTER O
;   112   112   #LATIN SMALL LETTER P
;   113   113   #LATIN SMALL LETTER Q
;   114   114   #LATIN SMALL LETTER R
;   115   115   #LATIN SMALL LETTER S
;   116   116   #LATIN SMALL LETTER T
;   117   117   #LATIN SMALL LETTER U
;   118   118   #LATIN SMALL LETTER V
;   119   119   #LATIN SMALL LETTER W
;   120   120   #LATIN SMALL LETTER X
;   121   121   #LATIN SMALL LETTER Y
;   122   122   #LATIN SMALL LETTER Z
;   123   123   #LEFT CURLY BRACKET
;   124   124   #VERTICAL LINE
;   125   125   #RIGHT CURLY BRACKET
;   126   126   #TILDE
;   127   127   #DELETE
;   128   199   #LATIN CAPITAL LETTER C WITH CEDILLA
;   129   252   #LATIN SMALL LETTER U WITH DIAERESIS
;   130   233   #LATIN SMALL LETTER E WITH ACUTE
;   131   226   #LATIN SMALL LETTER A WITH CIRCUMFLEX
;   132   228   #LATIN SMALL LETTER A WITH DIAERESIS
;   133   224   #LATIN SMALL LETTER A WITH GRAVE
;   134   229   #LATIN SMALL LETTER A WITH RING ABOVE
;   135   231   #LATIN SMALL LETTER C WITH CEDILLA
;   136   234   #LATIN SMALL LETTER E WITH CIRCUMFLEX
;   137   235   #LATIN SMALL LETTER E WITH DIAERESIS
;   138   232   #LATIN SMALL LETTER E WITH GRAVE
;   139   239   #LATIN SMALL LETTER I WITH DIAERESIS
;   140   238   #LATIN SMALL LETTER I WITH CIRCUMFLEX
;   141   236   #LATIN SMALL LETTER I WITH GRAVE
;   142   196   #LATIN CAPITAL LETTER A WITH DIAERESIS
;   143   197   #LATIN CAPITAL LETTER A WITH RING ABOVE
;   144   201   #LATIN CAPITAL LETTER E WITH ACUTE
;   145   145   #LATIN SMALL LIGATURE AE
;   146   146   #LATIN CAPITAL LIGATURE AE
;   147   244   #LATIN SMALL LETTER O WITH CIRCUMFLEX
;   148   246   #LATIN SMALL LETTER O WITH DIAERESIS
;   149   242   #LATIN SMALL LETTER O WITH GRAVE
;   150   251   #LATIN SMALL LETTER U WITH CIRCUMFLEX
;   151   249   #LATIN SMALL LETTER U WITH GRAVE
;   152   255   #LATIN SMALL LETTER Y WITH DIAERESIS
;   153   214   #LATIN CAPITAL LETTER O WITH DIAERESIS
;   154   220   #LATIN CAPITAL LETTER U WITH DIAERESIS
;   155   248   #LATIN SMALL LETTER O WITH STROKE
;   156   163   #POUND SIGN
;   157   216   #LATIN CAPITAL LETTER O WITH STROKE
;   158   215   #MULTIPLICATION SIGN
;   159   131   #LATIN SMALL LETTER F WITH HOOK
;   160   225   #LATIN SMALL LETTER A WITH ACUTE
;   161   237   #LATIN SMALL LETTER I WITH ACUTE
;   162   243   #LATIN SMALL LETTER O WITH ACUTE
;   163   250   #LATIN SMALL LETTER U WITH ACUTE
;   164   241   #LATIN SMALL LETTER N WITH TILDE
;   165   209   #LATIN CAPITAL LETTER N WITH TILDE
;   166   170   #FEMININE ORDINAL INDICATOR
;   167   186   #MASCULINE ORDINAL INDICATOR
;   168   191   #INVERTED QUESTION MARK
;   169   174   #REGISTERED SIGN
;   170   172   #NOT SIGN
;   171   189   #VULGAR FRACTION ONE HALF
;   172   188   #VULGAR FRACTION ONE QUARTER
;   173   161   #INVERTED EXCLAMATION MARK
;   174   171   #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
;   175   187   #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
;   176   176   #LIGHT SHADE
;   177   177   #MEDIUM SHADE
;   178   178   #DARK SHADE
;   179   179   #BOX DRAWINGS LIGHT VERTICAL
;   180   180   #BOX DRAWINGS LIGHT VERTICAL AND LEFT
;   181   193   #LATIN CAPITAL LETTER A WITH ACUTE
;   182   194   #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
;   183   192   #LATIN CAPITAL LETTER A WITH GRAVE
;   184   169   #COPYRIGHT SIGN
;   185   185   #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
;   186   186   #BOX DRAWINGS DOUBLE VERTICAL
;   187   187   #BOX DRAWINGS DOUBLE DOWN AND LEFT
;   188   188   #BOX DRAWINGS DOUBLE UP AND LEFT
;   189   162   #CENT SIGN
;   190   165   #YEN SIGN
;   191   191   #BOX DRAWINGS LIGHT DOWN AND LEFT
;   192   192   #BOX DRAWINGS LIGHT UP AND RIGHT
;   193   193   #BOX DRAWINGS LIGHT UP AND HORIZONTAL
;   194   194   #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
;   195   195   #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
;   196   196   #BOX DRAWINGS LIGHT HORIZONTAL
;   197   197   #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
;   198   227   #LATIN SMALL LETTER A WITH TILDE
;   199   195   #LATIN CAPITAL LETTER A WITH TILDE
;   200   200   #BOX DRAWINGS DOUBLE UP AND RIGHT
;   201   201   #BOX DRAWINGS DOUBLE DOWN AND RIGHT
;   202   202   #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
;   203   203   #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
;   204   204   #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
;   205   205   #BOX DRAWINGS DOUBLE HORIZONTAL
;   206   206   #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
;   207   164   #CURRENCY SIGN
;   208   240   #LATIN SMALL LETTER ETH
;   209   208   #LATIN CAPITAL LETTER ETH
;   210   202   #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
;   211   203   #LATIN CAPITAL LETTER E WITH DIAERESIS
;   212   200   #LATIN CAPITAL LETTER E WITH GRAVE
;   213   213   #LATIN SMALL LETTER DOTLESS I
;   214   205   #LATIN CAPITAL LETTER I WITH ACUTE
;   215   206   #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
;   216   207   #LATIN CAPITAL LETTER I WITH DIAERESIS
;   217   217   #BOX DRAWINGS LIGHT UP AND LEFT
;   218   218   #BOX DRAWINGS LIGHT DOWN AND RIGHT
;   219   219   #FULL BLOCK
;   220   220   #LOWER HALF BLOCK
;   221   166   #BROKEN BAR
;   222   204   #LATIN CAPITAL LETTER I WITH GRAVE
;   223   223   #UPPER HALF BLOCK
;   224   211   #LATIN CAPITAL LETTER O WITH ACUTE
;   225   223   #LATIN SMALL LETTER SHARP S
;   226   212   #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
;   227   210   #LATIN CAPITAL LETTER O WITH GRAVE
;   228   245   #LATIN SMALL LETTER O WITH TILDE
;   229   213   #LATIN CAPITAL LETTER O WITH TILDE
;   230   181   #MICRO SIGN
;   231   254   #LATIN SMALL LETTER THORN
;   232   222   #LATIN CAPITAL LETTER THORN
;   233   218   #LATIN CAPITAL LETTER U WITH ACUTE
;   234   219   #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
;   235   217   #LATIN CAPITAL LETTER U WITH GRAVE
;   236   253   #LATIN SMALL LETTER Y WITH ACUTE
;   237   221   #LATIN CAPITAL LETTER Y WITH ACUTE
;   238   175   #MACRON
;   239   180   #ACUTE ACCENT
;   240   173   #SOFT HYPHEN
;   241   177   #PLUS-MINUS SIGN
;   242   242   #DOUBLE LOW LINE
;   243   190   #VULGAR FRACTION THREE QUARTERS
;   244   182   #PILCROW SIGN
;   245   167   #SECTION SIGN
;   246   247   #DIVISION SIGN
;   247   184   #CEDILLA
;   248   176   #DEGREE SIGN
;   249   168   #DIAERESIS
;   250   183   #MIDDLE DOT
;   251   185   #SUPERSCRIPT ONE
;   252   179   #SUPERSCRIPT THREE
;   253   178   #SUPERSCRIPT TWO
;   254   254   #BLACK SQUARE
;   255   160   #NO-BREAK SPACE
;==========================================================================================================================================