<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple><table align='center'><tr><td></td></tr></table>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hi<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>You can use the GDAL unescape function like this:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal style='text-indent:.5in;text-autospace:none'><span
style='font-size:9.5pt;font-family:Consolas;color:gray'>///</span><span
style='font-size:9.5pt;font-family:Consolas;color:green'> </span><span
style='font-size:9.5pt;font-family:Consolas;color:gray'><summary></span><span
style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        <span style='color:gray'>///</span><span
style='color:green'> Remove "backslash quotable" escape characters
from the string and convert it to byte array.</span><o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        <span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span><o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        <span style='color:blue'>public</span> <span
style='color:blue'>static</span> <span style='color:blue'>byte</span>[]
RemoveEscapeCharacters(<span style='color:blue'>this</span> <span
style='color:blue'>string</span> value)<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        {<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            <span style='color:blue'>if</span>(<span
style='color:#2B91AF'>String</span>.IsNullOrEmpty(value))<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            {<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>                <span style='color:blue'>return</span> <span
style='color:blue'>new</span> <span style='color:blue'>byte</span>[0];<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            }<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            <span style='color:blue'>int</span> length =
value.Length;<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            <span style='color:#2B91AF'>IntPtr</span>
escapedString = CPLUnescapeString(value, <span style='color:blue'>ref</span>
length, 0);<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            <span style='color:blue'>byte</span>[]
escapedBytes = <span style='color:blue'>new</span> <span style='color:blue'>byte</span>[length];<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            <span style='color:#2B91AF'>Marshal</span>.Copy(escapedString,
escapedBytes, 0, length);<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            VSIFree(escapedString);<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>            <span style='color:blue'>return</span>
escapedBytes;<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        }<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'><o:p> </o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        [<span style='color:#2B91AF'>DllImport</span>(<span
style='color:#A31515'>"gdal18.dll"</span>, EntryPoint = <span
style='color:#A31515'>"CPLUnescapeString"</span>, CallingConvention =
<span style='color:#2B91AF'>CallingConvention</span>.Cdecl)]<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        <span style='color:blue'>private</span> <span
style='color:blue'>static</span> <span style='color:blue'>extern</span> <span
style='color:#2B91AF'>IntPtr</span> CPLUnescapeString(<span style='color:blue'>string</span>
input, <span style='color:blue'>ref</span> <span style='color:blue'>int</span>
length, <span style='color:blue'>int</span> scheme);<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'><o:p> </o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        [<span style='color:#2B91AF'>DllImport</span>(<span
style='color:#A31515'>"gdal18.dll"</span>, EntryPoint = <span
style='color:#A31515'>"VSIFree"</span>, CallingConvention = <span
style='color:#2B91AF'>CallingConvention</span>.Cdecl)]<o:p></o:p></span></p>

<p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;
font-family:Consolas'>        <span style='color:blue'>private</span> <span
style='color:blue'>static</span> <span style='color:blue'>extern</span> <span
style='color:blue'>void</span> VSIFree(<span style='color:#2B91AF'>IntPtr</span>
input);<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Yehiyam<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<table dir='ltr'><tr><td></td></tr></table><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
gdal-dev-bounces@lists.osgeo.org [mailto:gdal-dev-bounces@lists.osgeo.org] <b>On
Behalf Of </b>xavier lhomme<br>
<b>Sent:</b> Wednesday, June 19, 2013 11:50 PM<br>
<b>To:</b> gdal-dev<br>
<b>Subject:</b> [gdal-dev] Extract CGM from a NITF file<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Hi </span><o:p></o:p></p>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'><o:p> </o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
I'm trying to extract CGM files from a NITF but the CGM are corrupt. <o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'><o:p> </o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
First I Unescape the CGM Data and I obtain something like<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
 "\0,\vCreated CGM \"\0 f\0 ÿÿ\0 ...<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
Then write the text file. <o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> <o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
I compared this string with a CGM obtained from NITRO NITF
(nitro_extract_cgm.exe).<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
The new CGM file start with  <o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
  "\0,\vCreated CGM \"\0 f\0 </span><span style='font-size:10.0pt;
font-family:"Tahoma","sans-serif"'>��</span><span style='font-size:10.0pt;
font-family:"Arial","sans-serif"'>\0<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> I
succeed to read this CGM file with a CGM viewer. <o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'><o:p> </o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>One
of the difference come from caracter like ÿ (from GDAL) </span><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>�</span><span
style='font-size:10.0pt;font-family:"Arial","sans-serif"'> from NITRO<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'><o:p> </o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Then
It's probably something I missed in the Escaping/Unescaping function <o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'><o:p> </o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Because
UnescapeScring wasn't exposed in C# I wrote a function : <o:p></o:p></span></p>

</div>

<div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>static
public string UnescapeString(string pszInput)<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
      {<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
           string pszOutput="";  
 <o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
          int iIn = 0;<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
          for (iIn = 0; iIn<pszInput.Length; iIn++)<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
          {<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
              if (pszInput[iIn] == '\\')<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
              {<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                  iIn++;<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                  if
(pszInput[iIn] == 'n')<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                     
pszOutput += '\n';<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                  else if
(pszInput[iIn] == '0')<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                     
pszOutput += '\0';<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                  else<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                     
pszOutput += pszInput[iIn];<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
              }<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
              else<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
              {<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
                  pszOutput +=
pszInput[iIn];<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
              }<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
          }<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
          return pszOutput;<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'> 
      }<o:p></o:p></span></p>

</div>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'><o:p> </o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>thanks
in advance!<o:p></o:p></span></p>

</div>

<div>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Best
regards <o:p></o:p></span></p>

</div>

</div>

</div>

________________________________________<br>
This message (including any attachments) issued by RAFAEL- ADVANCED DEFENSE SYSTEMS LTD. (hereinafter "RAFAEL") contains confidential information intended for a specific individual and purpose, may constitute information that is privileged or confidential or otherwise protected from disclosure. If you are not the intended recipient, you should contact us immediately and thereafter delete this message from your system. You are hereby notified that any disclosure, copying, dissemination, distribution or forwarding of this message, or the taking of any action based on it, is strictly prohibited. If you have received this e-mail in error, please notify us immediately by e-mail mailto:lawraf@rafael.co.il and completely delete or destroy any and all electronic or other copies of the original message and any attachments thereof.
</body>

</html>