EW Avionics IGC File Format - Character Mappings

Introduction

When EWView exports a trace in the IGC format certain fields from the EWT file are copied directly to the output file. Unfortunately, the character set allowed in these fields in the IGC format is a subset of the set of characters which are possible in the EWT file.

Some fields in the EWT file are stored using a large subset of the standard IBM character set (code page 850 - Multilingual (Latin 1)). This subset includes the whole of the printable ASCII character set.

Fields in the IGC file format are a restricted to a subset of the printable ASCII characters. This is therefore a subset of the characters possible in the EWT file.

Characters in the relevant EWT fields which are not contained in IGC subset are mapped to characters which are in order to ensure that a valid IGC file is produced.

The field which is most affected by this mapping is the EWT comment text which is included in the IGC file as a (possibly empty) sequence of logbook records. This can contain any of the printable characters allowed in an EWT file.

Other fields which potentially could be affected include the glider, pilot and GPS receiver fields ("pilot info" fields in the EW FR Model D) and turn point names in a declaration and datum names from the GPS receiver. Currently EWView/DOS checks the contents of the declaration fields prior to download (applying the mapping documented here as the characters are typed in by the user) and all characters which appear in datum names produced by approved GPS receivers fall within the IGC character set so mapping of these fields is not currently essential.

In future, a more robust version of EWView/DOS might check these fields while preparing for export and warn if the there are unsupported characters present. This would only be useful if there was any software in existence which allowed the download of characters outside the IGC subset. Applying any mapping to these fields prior to export is of questionable value as it would prevent VALI-EWA calculating the correct checksum. Before deciding whether to perform such a mapping it would be necessary to weigh up the consequences of causing the security code to not match making the file insecure for IGC purposes against the consequences for analysis software of reading files which do not comply strictly with the standard.

In the absence of such non-conforming declaration download software the addition of this check is not urgent.

(The comment text is not included in the checksum so these considerations does not apply to it).

Mappings

The general principle followed is that EWT characters which are in the allowed IGC character set are preserved, the remainder are either mapped to sensible alternatives or to '#' (hash/pound/number sign/sharp).

Note - the character names used in the following table are purly for descriptive purposes. They are not in anyway definitive names.

EWT Char IGC Char
Hex Char Name Hex Char Name
00-19 Control Chars 23 # Hash
20   Space 20   Space
21 ! Exclamation mark 23 # Hash
22 " Double Quote 22 " Double Quote
23 # Hash 23 # Hash
24 $ Dollar 23 # Hash
25 % Percent 25 % Percent
26 & Ampersand 26 & Ampersand
27 ' Single Quote 27 ' Single Quote
28 ( Open Parenthesis 28 ( Open Parenthesis
29 ) Close Parenthesis 29 ) Close Parenthesis
2A * Asterisk 23 # Hash
2B + Plus 2B + Plus
2C , Comma 3B ; Semicolon
2D - Minus 2D - Minus
2E . Point 2E . Point
2F / Slash 2F / Slash
30-39 0..9 Digits 30-39 0..9 Digits
3A : Colon 3A : Colon
3B ; Semicolon 3B ; Semicolon
3C < Less Than 3C < Less Than
3D = Equal 3D = Equal
3E > Greater Than 3E > Greater Than
3F ? Question Mark 3F ? Question Mark
40 @ At 40 @ At
41-5A A..Z Upper Case Letters 41-5A A..Z Upper Case Letters
5B [ Open Bracket 5B [ Open Bracket
5C \ Backslash 23 # Hash
5D ] Close Bracket 5D ] Close Bracket
5E ^ Circumflex 23 # Hash
5F _ Underscore 5F _ Underscore
60 ` Open Single Quote 60 ` Open Single Quote
61..7A a..z Lower Case Letters 61..7A a..z Lower Case Letters
7B { Open Braces 7B { Open Braces
7C | Vertical Bar 7C | Vertical Bar
7D } Close Braces 7D } Close Braces
7E ~ Tilde 23 # Hash
7F Del 23 # Hash
80 Upper Case C Cedilla 43 C Upper Case C
81 Lower Case U Umlaut 75 u Lower Case U
82 Lower Case E Acute 65 e Lower Case E
83 Lower Case A Circumflex 61 a Lower Case A
84 Lower Case A Umlaut 61 a Lower Case A
85 Lower Case A Grave 61 a Lower Case A
86 Lower Case A Ring 61 a Lower Case A
87 Lower Case C Cedilla 63 c Lower Case C
88 Lower Case E Circumflex 65 e Lower Case E
89 Lower Case E Umlaut 65 e Lower Case E
8A Lower Case E Grave 65 e Lower Case E
8B Lower Case I Umlaut 69 i Lower Case I
8C Lower Case I Circumflex 69 i Lower Case I
8D Lower Case I Grave 69 i Lower Case I
8E Upper Case A Umlaut 41 A Upper Case A
8F Upper Case A Ring 41 A Upper Case A
90 Upper Case E Acute 45 E Upper Case E
91 Lower Case AE Dipthong 23 # Hash
92 Upper Case AE Dipthong 23 # Hash
93 Lower Case O Circumflex 6F o Lower Case O
94 Lower Case O Umlaut 6F o Lower Case O
95 Lower Case O Grave 6F o Lower Case O
96 Lower Case U Circumflex 75 u Lower Case U
97 Lower Case U Grave 75 u Lower Case U
98 Lower Case Y Umlaut 79 y Lower Case Y
99 Upper Case O Umlaut 4F O Upper Case O
9A Upper Case U Umlaut 55 U Upper Case U
9B Lower Case O Slash 23 # Hash
9C Pound 23 # Hash
9D Upper Case O Slash 23 # Hash
9E Multiply 23 # Hash
9F Eff Thingy 23 # Hash
A0 Lower Case A Acute 61 a Lower Case A
A1 Lower Case I Acute 69 i Lower Case I
A2 Lower Case O Acute 6F o Lower Case O
A3 Lower Case U Acute 75 u Lower Case U
A4 Lower Case N Tilde 6E n Lower Case N
A5 Upper Case N Tilde 4E N Upper Case N
A6 Superscript Lower
Case A Underscore
23 # Hash
A7 Superscript Lower
Case O Underscore
23 # Hash
A8 Inverted Question Mark 23 # Hash
A9 Registered Symbol 23 # Hash
AA Not/Bar 23 # Hash
AB Half 23 # Hash
AC Quarter 23 # Hash
AD Inverted Exclamation 23 # Hash
AE Open Angle Quotes 23 # Hash
AF Close Angle Quotes 23 # Hash
B0-B4 Line Drawing Characters 23 # Hash
B5 Upper Case A Acute 41 A Upper Case A
B6 Upper Case A Circumflex 41 A Upper Case A
B7 Upper Case A Grave 41 A Upper Case A
B8 Copyright 23 # Hash
B9-BC Line Drawing Characters 23 # Hash
BD Cent 63 c Lower Case C
BE Yen 23 # Hash
BF-C5 Line Drawing Characters 23 # Hash
C6 Lower Case A Tilde 61 a Lower Case A
C7 Upper Case A Tilde 41 A Upper Case A
C8-CE Line Drawing Characters 23 # Hash
CF Currency Symbol 23 # Hash
D0 Lower Case Delta 64 d Lower Case D
D1 Upper Case D Bar 44 D Upper Case D
D2 Upper Case E Circumflex 45 E Upper Case E
D3 Upper Case E Umlaut 45 E Upper Case E
D4 Upper Case E Grave 45 E Upper Case E
D5 Line Drawing Character 23 # Hash
D6 Upper Case I Grave 49 I Upper Case I
D7 Upper Case I Circumflex 49 I Upper Case I
D8 Upper Case I Umlaut 49 I Upper Case I
D9-DD Line Drawing Characters 23 # Hash
DE Upper Case I Grave 49 I Upper Case I
DF Line Drawing Character 23 # Hash
E0 Upper Case O Acute 4F O Upper Case O
E1 Double S 53 S Upper Case S
E2 Upper Case O Circumflex 4F O Upper Case O
E3 Upper Case O Grave 4F O Upper Case O
E4 Lower Case O Tilde 6F o Lower Case O
E5 Upper Case O Tilde 4F O Upper Case O
E6 Micro 23 # Hash
E7 Lower Case Eth/Thorn? 23 # Hash
E8 Upper Case Eth/Thorn? 23 # Hash
E9 Upper Case U Acute 55 U Upper Case U
EA Upper Case U Tilde 55 U Upper Case U
EB Upper Case U Grave 55 U Upper Case U
EC Lower Case Y Acute 79 y Lower Case Y
ED Upper Case Y Acute 59 Y Upper Case Y
EE Overbar 23 # Hash
EF Acute 23 # Hash
F0 Bar 23 # Hash
F1 Plus or Minus 23 # Hash
F2 Equal 23 # Hash
F3 Three Quarters 23 # Hash
F4 Paragraph 23 # Hash
F5 Section 23 # Hash
F6 Divide 23 # Hash
F7 Tadpole 23 # Hash
F8 Degree 64 d Lower Case D
F9 Minute 23 # Hash
FA Second 23 # Hash
FB Superscript 1 23 # Hash
FC Superscript 2 23 # Hash
FD Superscript 3 23 # Hash
FE Block 23 # Hash
FF 23 # Hash