home
products
contribute
download
documentation
forum
Home
Forums
New posts
Search forums
What's new
New posts
All posts
Latest activity
Members
Registered members
Current visitors
Donate
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Search titles only
By:
Menu
Log in
Register
Navigation
Install the app
Install
More options
Contact us
Close Menu
Forums
MediaPortal 1
Development
General Development (no feature request here!)
[patch] DVB EPG ISO 6937 support
Contact us
RSS
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
<blockquote data-quote="zdar" data-source="post: 37437" data-attributes="member: 17892"><p>Hi,</p><p>i've implemented iso 6937 support for EPG. It is a bit hacked, but is working... at least for EPG in Czech Republic</p><p></p><p>For the wondering why .net Encoding class is not used - i've tried to use but:</p><p>-on most systems proper nls file is not installed</p><p>-even if the file is installed the codepage conversion is BROKEN (thx Microsfot)</p><p>So i created proper convertor by myself.</p><p></p><p>Patch (<a href="http://ceg.fsv.cvut.cz/CZ/misc/jirka/mediaportal/epgencoding.patch" target="_blank">http://ceg.fsv.cvut.cz/CZ/misc/jirka/mediaportal/epgencoding.patch</a>)</p><p>And new file</p><p>(<a href="http://ceg.fsv.cvut.cz/CZ/misc/jirka/mediaportal/iso6937toUnicode.cs" target="_blank">http://ceg.fsv.cvut.cz/CZ/misc/jirka/mediaportal/iso6937toUnicode.cs</a>)</p><p></p><p>Index: TVCapture/TVCapture.csproj</p><p>===================================================================</p><p>RCS file: /cvsroot/mediaportal/mediaportal/TVCapture/TVCapture.csproj,v</p><p>retrieving revision 1.69</p><p>diff -u -r1.69 TVCapture.csproj</p><p>--- TVCapture/TVCapture.csproj 8 Feb 2006 07:03:52 -0000 1.69</p><p>+++ TVCapture/TVCapture.csproj 11 Feb 2006 12:07:50 -0000</p><p>@@ -242,6 +242,7 @@</p><p> <Compile Include="CommandProcessor\TvCardCollection.cs" /></p><p> <Compile Include="CommandProcessor\Commands\ViewTvCommand.cs" /></p><p> <Compile Include="DiskManagement\RecordingImporterWorker.cs" /></p><p>+ <Compile Include="EPG\iso6937toUnicode.cs" /></p><p> <Compile Include="Graphs\Dummy\DummyGraph.cs" /></p><p> <Compile Include="Graphs\DVB\DVBGraphBase.cs" /></p><p> <Compile Include="Graphs\DVB\DVBGraphSkyStar2.cs" /></p><p>Index: TVCapture/EPG/EpgGrabber.cs</p><p>===================================================================</p><p>RCS file: /cvsroot/mediaportal/mediaportal/TVCapture/EPG/EpgGrabber.cs,v</p><p>retrieving revision 1.8</p><p>diff -u -r1.8 EpgGrabber.cs</p><p>--- TVCapture/EPG/EpgGrabber.cs 4 Feb 2006 19:30:29 -0000 1.8</p><p>+++ TVCapture/EPG/EpgGrabber.cs 11 Feb 2006 13:25:26 -0000</p><p>@@ -467,8 +467,9 @@</p><p> for (int z = 0; z < languageCount; ++z)</p><p> {</p><p> _epgInterface.GetEPGLanguage((uint)x, (uint)i, (uint)z, out languageId, out ptrTitle, out ptrDesc);</p><p>- title = Marshal.PtrToStringAnsi(ptrTitle);</p><p>- description = Marshal.PtrToStringAnsi(ptrDesc);</p><p>+ iso6937toUnicode iso = new iso6937toUnicode();</p><p>+ title = iso.Convert(ptrTitle);</p><p>+ description = iso.Convert(ptrDesc);</p><p> string language = String.Empty;</p><p> language += (char)((languageId >> 16) & 0xff);</p><p> language += (char)((languageId >> 8) & 0xff);</p><p>-----------------------------------------------------------------------------------</p><p>new file TVCapture/EPG/iso6937toUnicode.cs</p><p>-----------------------------------------------------------------------------------</p><p>using System;</p><p>using System.Runtime.InteropServices;</p><p></p><p>namespace MediaPortal.TV.Epg</p><p>{</p><p> class iso6937toUnicode</p><p> {</p><p> /// <summary></p><p> /// ISO 6937 to Unicode convertor for EPG</p><p> /// </summary></p><p> public string Convert(IntPtr ptr)</p><p> {</p><p> char ch;</p><p> int i;</p><p> i = 0;</p><p> string output = String.Empty;</p><p> byte b = Marshal.ReadByte(ptr, 0);</p><p> if (b < 0x20)</p><p> {</p><p> // ISO 6937 encoding must start with character between 0x20 and 0xFF</p><p> // otherwise it is dfferent encoding table</p><p> // for example 0x05 means encoding table 8859-9</p><p> // here is just fallback to system ANSI</p><p> return Marshal.PtrToStringAnsi(ptr);</p><p> }</p><p> else</p><p> while (b != 0)</p><p> {</p><p> ch = (char)0x00;</p><p> switch (b)</p><p> {</p><p> // at first single byte characters</p><p> case 0xA8: ch = (char)0x00A4; break;</p><p> case 0xA9: ch = (char)0x2018; break;</p><p> case 0xAA: ch = (char)0x201C; break;</p><p> case 0xAC: ch = (char)0x2190; break;</p><p> case 0xAD: ch = (char)0x2191; break;</p><p> case 0xAE: ch = (char)0x2192; break;</p><p> case 0xAF: ch = (char)0x2193; break;</p><p> case 0xB4: ch = (char)0x00D7; break;</p><p> case 0xB8: ch = (char)0x00F7; break;</p><p> case 0xB9: ch = (char)0x2019; break;</p><p> case 0xBA: ch = (char)0x201D; break;</p><p> case 0xD0: ch = (char)0x2014; break;</p><p> case 0xD1: ch = (char)0xB9; break;</p><p> case 0xD2: ch = (char)0xAE; break;</p><p> case 0xD3: ch = (char)0xA9; break;</p><p> case 0xD4: ch = (char)0x2122; break;</p><p> case 0xD5: ch = (char)0x266A; break;</p><p> case 0xD6: ch = (char)0xAC; break;</p><p> case 0xD7: ch = (char)0xA6; break;</p><p> case 0xDC: ch = (char)0x215B; break;</p><p> case 0xDD: ch = (char)0x215C; break;</p><p> case 0xDE: ch = (char)0x215D; break;</p><p> case 0xDF: ch = (char)0x215E; break;</p><p> case 0xE0: ch = (char)0x2126; break;</p><p> case 0xE1: ch = (char)0xC6; break;</p><p> case 0xE2: ch = (char)0xD0; break;</p><p> case 0xE3: ch = (char)0xAA; break;</p><p> case 0xE4: ch = (char)0x126; break;</p><p> case 0xE6: ch = (char)0x132; break;</p><p> case 0xE7: ch = (char)0x013F; break;</p><p> case 0xE8: ch = (char)0x141; break;</p><p> case 0xE9: ch = (char)0xD8; break;</p><p> case 0xEA: ch = (char)0x152; break;</p><p> case 0xEB: ch = (char)0xBA; break;</p><p> case 0xEC: ch = (char)0xDE; break;</p><p> case 0xED: ch = (char)0x166; break;</p><p> case 0xEE: ch = (char)0x014A; break;</p><p> case 0xEF: ch = (char)0x149; break;</p><p> case 0xF0: ch = (char)0x138; break;</p><p> case 0xF1: ch = (char)0xE6; break;</p><p> case 0xF2: ch = (char)0x111; break;</p><p> case 0xF3: ch = (char)0xF0; break;</p><p> case 0xF4: ch = (char)0x127; break;</p><p> case 0xF5: ch = (char)0x131; break;</p><p> case 0xF6: ch = (char)0x133; break;</p><p> case 0xF7: ch = (char)0x140; break;</p><p> case 0xF8: ch = (char)0x142; break;</p><p> case 0xF9: ch = (char)0xF8; break;</p><p> case 0xFA: ch = (char)0x153; break;</p><p> case 0xFB: ch = (char)0xDF; break;</p><p> case 0xFC: ch = (char)0xFE; break;</p><p> case 0xFD: ch = (char)0x167; break;</p><p> case 0xFE: ch = (char)0x014B; break;</p><p> case 0xFF: ch = (char)0xAD; break;</p><p> // multibyte</p><p> case 0xC1:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x41: ch = (char)0xC0; break;</p><p> case 0x45: ch = (char)0xC8; break;</p><p> case 0x49: ch = (char)0xCC; break;</p><p> case 0x4F: ch = (char)0xD2; break;</p><p> case 0x55: ch = (char)0xD9; break;</p><p> case 0x61: ch = (char)0xE0; break;</p><p> case 0x65: ch = (char)0xE8; break;</p><p> case 0x69: ch = (char)0xEC; break;</p><p> case 0x6F: ch = (char)0xF2; break;</p><p> case 0x75: ch = (char)0xF9; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xC2:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0xB4; break;</p><p> case 0x41: ch = (char)0xC1; break;</p><p> case 0x43: ch = (char)0x106; break;</p><p> case 0x45: ch = (char)0xC9; break;</p><p> case 0x49: ch = (char)0xCD; break;</p><p> case 0x4C: ch = (char)0x139; break;</p><p> case 0x4E: ch = (char)0x143; break;</p><p> case 0x4F: ch = (char)0xD3; break;</p><p> case 0x52: ch = (char)0x154; break;</p><p> case 0x53: ch = (char)0x015A; break;</p><p> case 0x55: ch = (char)0xDA; break;</p><p> case 0x59: ch = (char)0xDD; break;</p><p> case 0x5A: ch = (char)0x179; break;</p><p> case 0x61: ch = (char)0xE1; break;</p><p> case 0x63: ch = (char)0x107; break;</p><p> case 0x65: ch = (char)0xE9; break;</p><p> case 0x69: ch = (char)0xED; break;</p><p> case 0x6C: ch = (char)0x013A; break;</p><p> case 0x6E: ch = (char)0x144; break;</p><p> case 0x6F: ch = (char)0xF3; break;</p><p> case 0x72: ch = (char)0x155; break;</p><p> case 0x73: ch = (char)0x015B; break;</p><p> case 0x75: ch = (char)0xFA; break;</p><p> case 0x79: ch = (char)0xFD; break;</p><p> case 0x7A: ch = (char)0x017A; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p></p><p> case 0xC3:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x41: ch = (char)0xC2; break;</p><p> case 0x43: ch = (char)0x108; break;</p><p> case 0x45: ch = (char)0xCA; break;</p><p> case 0x47: ch = (char)0x011C; break;</p><p> case 0x48: ch = (char)0x124; break;</p><p> case 0x49: ch = (char)0xCE; break;</p><p> case 0x4A: ch = (char)0x134; break;</p><p> case 0x4F: ch = (char)0xD4; break;</p><p> case 0x53: ch = (char)0x015C; break;</p><p> case 0x55: ch = (char)0xDB; break;</p><p> case 0x57: ch = (char)0x174; break;</p><p> case 0x59: ch = (char)0x176; break;</p><p> case 0x61: ch = (char)0xE2; break;</p><p> case 0x63: ch = (char)0x109; break;</p><p> case 0x65: ch = (char)0xEA; break;</p><p> case 0x67: ch = (char)0x011D; break;</p><p> case 0x68: ch = (char)0x125; break;</p><p> case 0x69: ch = (char)0xEE; break;</p><p> case 0x6A: ch = (char)0x135; break;</p><p> case 0x6F: ch = (char)0xF4; break;</p><p> case 0x73: ch = (char)0x015D; break;</p><p> case 0x75: ch = (char)0xFB; break;</p><p> case 0x77: ch = (char)0x175; break;</p><p> case 0x79: ch = (char)0x177; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xC4:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x41: ch = (char)0xC3; break;</p><p> case 0x49: ch = (char)0x128; break;</p><p> case 0x4E: ch = (char)0xD1; break;</p><p> case 0x4F: ch = (char)0xD5; break;</p><p> case 0x55: ch = (char)0x168; break;</p><p> case 0x61: ch = (char)0xE3; break;</p><p> case 0x69: ch = (char)0x129; break;</p><p> case 0x6E: ch = (char)0xF1; break;</p><p> case 0x6F: ch = (char)0xF5; break;</p><p> case 0x75: ch = (char)0x169; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xC5:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0xAF; break;</p><p> case 0x41: ch = (char)0x100; break;</p><p> case 0x45: ch = (char)0x112; break;</p><p> case 0x49: ch = (char)0x012A; break;</p><p> case 0x4F: ch = (char)0x014C; break;</p><p> case 0x55: ch = (char)0x016A; break;</p><p> case 0x61: ch = (char)0x101; break;</p><p> case 0x65: ch = (char)0x113; break;</p><p> case 0x69: ch = (char)0x012B; break;</p><p> case 0x6F: ch = (char)0x014D; break;</p><p> case 0x75: ch = (char)0x016B; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xC6:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0x02D8; break;</p><p> case 0x41: ch = (char)0x102; break;</p><p> case 0x47: ch = (char)0x011E; break;</p><p> case 0x55: ch = (char)0x016C; break;</p><p> case 0x61: ch = (char)0x103; break;</p><p> case 0x67: ch = (char)0x011F; break;</p><p> case 0x75: ch = (char)0x016D; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xC7:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0x02D9; break;</p><p> case 0x43: ch = (char)0x010A; break;</p><p> case 0x45: ch = (char)0x116; break;</p><p> case 0x47: ch = (char)0x120; break;</p><p> case 0x49: ch = (char)0x130; break;</p><p> case 0x5A: ch = (char)0x017B; break;</p><p> case 0x63: ch = (char)0x010B; break;</p><p> case 0x65: ch = (char)0x117; break;</p><p> case 0x67: ch = (char)0x121; break;</p><p> case 0x7A: ch = (char)0x017C; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xC8:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0xA8; break;</p><p> case 0x41: ch = (char)0xC4; break;</p><p> case 0x45: ch = (char)0xCB; break;</p><p> case 0x49: ch = (char)0xCF; break;</p><p> case 0x4F: ch = (char)0xD6; break;</p><p> case 0x55: ch = (char)0xDC; break;</p><p> case 0x59: ch = (char)0x178; break;</p><p> case 0x61: ch = (char)0xE4; break;</p><p> case 0x65: ch = (char)0xEB; break;</p><p> case 0x69: ch = (char)0xEF; break;</p><p> case 0x6F: ch = (char)0xF6; break;</p><p> case 0x75: ch = (char)0xFC; break;</p><p> case 0x79: ch = (char)0xFF; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xCA:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0x02DA; break;</p><p> case 0x41: ch = (char)0xC5; break;</p><p> case 0x55: ch = (char)0x016E; break;</p><p> case 0x61: ch = (char)0xE5; break;</p><p> case 0x75: ch = (char)0x016F; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xCB:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0xB8; break;</p><p> case 0x43: ch = (char)0xC7; break;</p><p> case 0x47: ch = (char)0x122; break;</p><p> case 0x4B: ch = (char)0x136; break;</p><p> case 0x4C: ch = (char)0x013B; break;</p><p> case 0x4E: ch = (char)0x145; break;</p><p> case 0x52: ch = (char)0x156; break;</p><p> case 0x53: ch = (char)0x015E; break;</p><p> case 0x54: ch = (char)0x162; break;</p><p> case 0x63: ch = (char)0xE7; break;</p><p> case 0x67: ch = (char)0x123; break;</p><p> case 0x6B: ch = (char)0x137; break;</p><p> case 0x6C: ch = (char)0x013C; break;</p><p> case 0x6E: ch = (char)0x146; break;</p><p> case 0x72: ch = (char)0x157; break;</p><p> case 0x73: ch = (char)0x015F; break;</p><p> case 0x74: ch = (char)0x163; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xCD:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0x02DD; break;</p><p> case 0x4F: ch = (char)0x150; break;</p><p> case 0x55: ch = (char)0x170; break;</p><p> case 0x6F: ch = (char)0x151; break;</p><p> case 0x75: ch = (char)0x171; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xCE:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0x02DB; break;</p><p> case 0x41: ch = (char)0x104; break;</p><p> case 0x45: ch = (char)0x118; break;</p><p> case 0x49: ch = (char)0x012E; break;</p><p> case 0x55: ch = (char)0x172; break;</p><p> case 0x61: ch = (char)0x105; break;</p><p> case 0x65: ch = (char)0x119; break;</p><p> case 0x69: ch = (char)0x012F; break;</p><p> case 0x75: ch = (char)0x173; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> case 0xCF:</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> switch (b)</p><p> {</p><p> case 0x20: ch = (char)0x02C7; break;</p><p> case 0x43: ch = (char)0x010C; break;</p><p> case 0x44: ch = (char)0x010E; break;</p><p> case 0x45: ch = (char)0x011A; break;</p><p> case 0x4C: ch = (char)0x013D; break;</p><p> case 0x4E: ch = (char)0x147; break;</p><p> case 0x52: ch = (char)0x158; break;</p><p> case 0x53: ch = (char)0x160; break;</p><p> case 0x54: ch = (char)0x164; break;</p><p> case 0x5A: ch = (char)0x017D; break;</p><p> case 0x63: ch = (char)0x010D; break;</p><p> case 0x64: ch = (char)0x010F; break;</p><p> case 0x65: ch = (char)0x011B; break;</p><p> case 0x6C: ch = (char)0x013E; break;</p><p> case 0x6E: ch = (char)0x148; break;</p><p> case 0x72: ch = (char)0x159; break;</p><p> case 0x73: ch = (char)0x161; break;</p><p> case 0x74: ch = (char)0x165; break;</p><p> case 0x7A: ch = (char)0x017E; break;</p><p> // unknown character --> fallback</p><p> default: ch = (char)b; break;</p><p> }</p><p> break;</p><p> // rest is the same</p><p> default: ch = (char)b; break;</p><p> }</p><p> if (b != 0)</p><p> {</p><p> i++;</p><p> b = Marshal.ReadByte(ptr, i);</p><p> }</p><p> if (ch != 0)</p><p> {</p><p> output += ch;</p><p> }</p><p> }</p><p> return output;</p><p> }</p><p> }</p><p>}</p></blockquote><p></p>
[QUOTE="zdar, post: 37437, member: 17892"] Hi, i've implemented iso 6937 support for EPG. It is a bit hacked, but is working... at least for EPG in Czech Republic For the wondering why .net Encoding class is not used - i've tried to use but: -on most systems proper nls file is not installed -even if the file is installed the codepage conversion is BROKEN (thx Microsfot) So i created proper convertor by myself. Patch ([url]http://ceg.fsv.cvut.cz/CZ/misc/jirka/mediaportal/epgencoding.patch[/url]) And new file ([url]http://ceg.fsv.cvut.cz/CZ/misc/jirka/mediaportal/iso6937toUnicode.cs[/url]) Index: TVCapture/TVCapture.csproj =================================================================== RCS file: /cvsroot/mediaportal/mediaportal/TVCapture/TVCapture.csproj,v retrieving revision 1.69 diff -u -r1.69 TVCapture.csproj --- TVCapture/TVCapture.csproj 8 Feb 2006 07:03:52 -0000 1.69 +++ TVCapture/TVCapture.csproj 11 Feb 2006 12:07:50 -0000 @@ -242,6 +242,7 @@ <Compile Include="CommandProcessor\TvCardCollection.cs" /> <Compile Include="CommandProcessor\Commands\ViewTvCommand.cs" /> <Compile Include="DiskManagement\RecordingImporterWorker.cs" /> + <Compile Include="EPG\iso6937toUnicode.cs" /> <Compile Include="Graphs\Dummy\DummyGraph.cs" /> <Compile Include="Graphs\DVB\DVBGraphBase.cs" /> <Compile Include="Graphs\DVB\DVBGraphSkyStar2.cs" /> Index: TVCapture/EPG/EpgGrabber.cs =================================================================== RCS file: /cvsroot/mediaportal/mediaportal/TVCapture/EPG/EpgGrabber.cs,v retrieving revision 1.8 diff -u -r1.8 EpgGrabber.cs --- TVCapture/EPG/EpgGrabber.cs 4 Feb 2006 19:30:29 -0000 1.8 +++ TVCapture/EPG/EpgGrabber.cs 11 Feb 2006 13:25:26 -0000 @@ -467,8 +467,9 @@ for (int z = 0; z < languageCount; ++z) { _epgInterface.GetEPGLanguage((uint)x, (uint)i, (uint)z, out languageId, out ptrTitle, out ptrDesc); - title = Marshal.PtrToStringAnsi(ptrTitle); - description = Marshal.PtrToStringAnsi(ptrDesc); + iso6937toUnicode iso = new iso6937toUnicode(); + title = iso.Convert(ptrTitle); + description = iso.Convert(ptrDesc); string language = String.Empty; language += (char)((languageId >> 16) & 0xff); language += (char)((languageId >> 8) & 0xff); ----------------------------------------------------------------------------------- new file TVCapture/EPG/iso6937toUnicode.cs ----------------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; namespace MediaPortal.TV.Epg { class iso6937toUnicode { /// <summary> /// ISO 6937 to Unicode convertor for EPG /// </summary> public string Convert(IntPtr ptr) { char ch; int i; i = 0; string output = String.Empty; byte b = Marshal.ReadByte(ptr, 0); if (b < 0x20) { // ISO 6937 encoding must start with character between 0x20 and 0xFF // otherwise it is dfferent encoding table // for example 0x05 means encoding table 8859-9 // here is just fallback to system ANSI return Marshal.PtrToStringAnsi(ptr); } else while (b != 0) { ch = (char)0x00; switch (b) { // at first single byte characters case 0xA8: ch = (char)0x00A4; break; case 0xA9: ch = (char)0x2018; break; case 0xAA: ch = (char)0x201C; break; case 0xAC: ch = (char)0x2190; break; case 0xAD: ch = (char)0x2191; break; case 0xAE: ch = (char)0x2192; break; case 0xAF: ch = (char)0x2193; break; case 0xB4: ch = (char)0x00D7; break; case 0xB8: ch = (char)0x00F7; break; case 0xB9: ch = (char)0x2019; break; case 0xBA: ch = (char)0x201D; break; case 0xD0: ch = (char)0x2014; break; case 0xD1: ch = (char)0xB9; break; case 0xD2: ch = (char)0xAE; break; case 0xD3: ch = (char)0xA9; break; case 0xD4: ch = (char)0x2122; break; case 0xD5: ch = (char)0x266A; break; case 0xD6: ch = (char)0xAC; break; case 0xD7: ch = (char)0xA6; break; case 0xDC: ch = (char)0x215B; break; case 0xDD: ch = (char)0x215C; break; case 0xDE: ch = (char)0x215D; break; case 0xDF: ch = (char)0x215E; break; case 0xE0: ch = (char)0x2126; break; case 0xE1: ch = (char)0xC6; break; case 0xE2: ch = (char)0xD0; break; case 0xE3: ch = (char)0xAA; break; case 0xE4: ch = (char)0x126; break; case 0xE6: ch = (char)0x132; break; case 0xE7: ch = (char)0x013F; break; case 0xE8: ch = (char)0x141; break; case 0xE9: ch = (char)0xD8; break; case 0xEA: ch = (char)0x152; break; case 0xEB: ch = (char)0xBA; break; case 0xEC: ch = (char)0xDE; break; case 0xED: ch = (char)0x166; break; case 0xEE: ch = (char)0x014A; break; case 0xEF: ch = (char)0x149; break; case 0xF0: ch = (char)0x138; break; case 0xF1: ch = (char)0xE6; break; case 0xF2: ch = (char)0x111; break; case 0xF3: ch = (char)0xF0; break; case 0xF4: ch = (char)0x127; break; case 0xF5: ch = (char)0x131; break; case 0xF6: ch = (char)0x133; break; case 0xF7: ch = (char)0x140; break; case 0xF8: ch = (char)0x142; break; case 0xF9: ch = (char)0xF8; break; case 0xFA: ch = (char)0x153; break; case 0xFB: ch = (char)0xDF; break; case 0xFC: ch = (char)0xFE; break; case 0xFD: ch = (char)0x167; break; case 0xFE: ch = (char)0x014B; break; case 0xFF: ch = (char)0xAD; break; // multibyte case 0xC1: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x41: ch = (char)0xC0; break; case 0x45: ch = (char)0xC8; break; case 0x49: ch = (char)0xCC; break; case 0x4F: ch = (char)0xD2; break; case 0x55: ch = (char)0xD9; break; case 0x61: ch = (char)0xE0; break; case 0x65: ch = (char)0xE8; break; case 0x69: ch = (char)0xEC; break; case 0x6F: ch = (char)0xF2; break; case 0x75: ch = (char)0xF9; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xC2: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0xB4; break; case 0x41: ch = (char)0xC1; break; case 0x43: ch = (char)0x106; break; case 0x45: ch = (char)0xC9; break; case 0x49: ch = (char)0xCD; break; case 0x4C: ch = (char)0x139; break; case 0x4E: ch = (char)0x143; break; case 0x4F: ch = (char)0xD3; break; case 0x52: ch = (char)0x154; break; case 0x53: ch = (char)0x015A; break; case 0x55: ch = (char)0xDA; break; case 0x59: ch = (char)0xDD; break; case 0x5A: ch = (char)0x179; break; case 0x61: ch = (char)0xE1; break; case 0x63: ch = (char)0x107; break; case 0x65: ch = (char)0xE9; break; case 0x69: ch = (char)0xED; break; case 0x6C: ch = (char)0x013A; break; case 0x6E: ch = (char)0x144; break; case 0x6F: ch = (char)0xF3; break; case 0x72: ch = (char)0x155; break; case 0x73: ch = (char)0x015B; break; case 0x75: ch = (char)0xFA; break; case 0x79: ch = (char)0xFD; break; case 0x7A: ch = (char)0x017A; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xC3: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x41: ch = (char)0xC2; break; case 0x43: ch = (char)0x108; break; case 0x45: ch = (char)0xCA; break; case 0x47: ch = (char)0x011C; break; case 0x48: ch = (char)0x124; break; case 0x49: ch = (char)0xCE; break; case 0x4A: ch = (char)0x134; break; case 0x4F: ch = (char)0xD4; break; case 0x53: ch = (char)0x015C; break; case 0x55: ch = (char)0xDB; break; case 0x57: ch = (char)0x174; break; case 0x59: ch = (char)0x176; break; case 0x61: ch = (char)0xE2; break; case 0x63: ch = (char)0x109; break; case 0x65: ch = (char)0xEA; break; case 0x67: ch = (char)0x011D; break; case 0x68: ch = (char)0x125; break; case 0x69: ch = (char)0xEE; break; case 0x6A: ch = (char)0x135; break; case 0x6F: ch = (char)0xF4; break; case 0x73: ch = (char)0x015D; break; case 0x75: ch = (char)0xFB; break; case 0x77: ch = (char)0x175; break; case 0x79: ch = (char)0x177; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xC4: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x41: ch = (char)0xC3; break; case 0x49: ch = (char)0x128; break; case 0x4E: ch = (char)0xD1; break; case 0x4F: ch = (char)0xD5; break; case 0x55: ch = (char)0x168; break; case 0x61: ch = (char)0xE3; break; case 0x69: ch = (char)0x129; break; case 0x6E: ch = (char)0xF1; break; case 0x6F: ch = (char)0xF5; break; case 0x75: ch = (char)0x169; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xC5: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0xAF; break; case 0x41: ch = (char)0x100; break; case 0x45: ch = (char)0x112; break; case 0x49: ch = (char)0x012A; break; case 0x4F: ch = (char)0x014C; break; case 0x55: ch = (char)0x016A; break; case 0x61: ch = (char)0x101; break; case 0x65: ch = (char)0x113; break; case 0x69: ch = (char)0x012B; break; case 0x6F: ch = (char)0x014D; break; case 0x75: ch = (char)0x016B; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xC6: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0x02D8; break; case 0x41: ch = (char)0x102; break; case 0x47: ch = (char)0x011E; break; case 0x55: ch = (char)0x016C; break; case 0x61: ch = (char)0x103; break; case 0x67: ch = (char)0x011F; break; case 0x75: ch = (char)0x016D; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xC7: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0x02D9; break; case 0x43: ch = (char)0x010A; break; case 0x45: ch = (char)0x116; break; case 0x47: ch = (char)0x120; break; case 0x49: ch = (char)0x130; break; case 0x5A: ch = (char)0x017B; break; case 0x63: ch = (char)0x010B; break; case 0x65: ch = (char)0x117; break; case 0x67: ch = (char)0x121; break; case 0x7A: ch = (char)0x017C; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xC8: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0xA8; break; case 0x41: ch = (char)0xC4; break; case 0x45: ch = (char)0xCB; break; case 0x49: ch = (char)0xCF; break; case 0x4F: ch = (char)0xD6; break; case 0x55: ch = (char)0xDC; break; case 0x59: ch = (char)0x178; break; case 0x61: ch = (char)0xE4; break; case 0x65: ch = (char)0xEB; break; case 0x69: ch = (char)0xEF; break; case 0x6F: ch = (char)0xF6; break; case 0x75: ch = (char)0xFC; break; case 0x79: ch = (char)0xFF; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xCA: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0x02DA; break; case 0x41: ch = (char)0xC5; break; case 0x55: ch = (char)0x016E; break; case 0x61: ch = (char)0xE5; break; case 0x75: ch = (char)0x016F; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xCB: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0xB8; break; case 0x43: ch = (char)0xC7; break; case 0x47: ch = (char)0x122; break; case 0x4B: ch = (char)0x136; break; case 0x4C: ch = (char)0x013B; break; case 0x4E: ch = (char)0x145; break; case 0x52: ch = (char)0x156; break; case 0x53: ch = (char)0x015E; break; case 0x54: ch = (char)0x162; break; case 0x63: ch = (char)0xE7; break; case 0x67: ch = (char)0x123; break; case 0x6B: ch = (char)0x137; break; case 0x6C: ch = (char)0x013C; break; case 0x6E: ch = (char)0x146; break; case 0x72: ch = (char)0x157; break; case 0x73: ch = (char)0x015F; break; case 0x74: ch = (char)0x163; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xCD: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0x02DD; break; case 0x4F: ch = (char)0x150; break; case 0x55: ch = (char)0x170; break; case 0x6F: ch = (char)0x151; break; case 0x75: ch = (char)0x171; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xCE: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0x02DB; break; case 0x41: ch = (char)0x104; break; case 0x45: ch = (char)0x118; break; case 0x49: ch = (char)0x012E; break; case 0x55: ch = (char)0x172; break; case 0x61: ch = (char)0x105; break; case 0x65: ch = (char)0x119; break; case 0x69: ch = (char)0x012F; break; case 0x75: ch = (char)0x173; break; // unknown character --> fallback default: ch = (char)b; break; } break; case 0xCF: i++; b = Marshal.ReadByte(ptr, i); switch (b) { case 0x20: ch = (char)0x02C7; break; case 0x43: ch = (char)0x010C; break; case 0x44: ch = (char)0x010E; break; case 0x45: ch = (char)0x011A; break; case 0x4C: ch = (char)0x013D; break; case 0x4E: ch = (char)0x147; break; case 0x52: ch = (char)0x158; break; case 0x53: ch = (char)0x160; break; case 0x54: ch = (char)0x164; break; case 0x5A: ch = (char)0x017D; break; case 0x63: ch = (char)0x010D; break; case 0x64: ch = (char)0x010F; break; case 0x65: ch = (char)0x011B; break; case 0x6C: ch = (char)0x013E; break; case 0x6E: ch = (char)0x148; break; case 0x72: ch = (char)0x159; break; case 0x73: ch = (char)0x161; break; case 0x74: ch = (char)0x165; break; case 0x7A: ch = (char)0x017E; break; // unknown character --> fallback default: ch = (char)b; break; } break; // rest is the same default: ch = (char)b; break; } if (b != 0) { i++; b = Marshal.ReadByte(ptr, i); } if (ch != 0) { output += ch; } } return output; } } } [/QUOTE]
Insert quotes…
Verification
Post reply
Forums
MediaPortal 1
Development
General Development (no feature request here!)
[patch] DVB EPG ISO 6937 support
Contact us
RSS
Top
Bottom