Re: dvb-apps: charset support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Mauro,
 
> I added some patches to dvb-apps/util/scan.c in order to properly support
> EN 300 468 charsets.
> Before the patch, scan were producing invalid UTF-8 codes here, for
> ISO-8859-15 charsets, as
> scan were simply filling service/provider name with whatever non-control
> characters that were
> there. So, if your computer uses the same character as your service
> provider, you're lucky.
> Otherwise, invalid characters will appear at the scan tables.
> 
> After the changes, scan gets the locale environment charset, and use it as
> the output charset
> on the output files.

This implementation in scan expects the environment settings to be 'language_country.encoding', but i think the more general way is 'language_country.encoding@variant'.

i get the following error from scan, because iconv doesnt know 'ISO-8859-15@euro'.

<snip>
WARNING: Conversion from ISO-8859-9 to ISO-8859-15@euro not supported
WARNING: Conversion from ISO-8859-9 to ISO-8859-15@euro not supported
...
WARNING: Conversion from ISO-8859-15 to ISO-8859-15@euro not supported
WARNING: Conversion from ISO-8859-15 to ISO-8859-15@euro not supported
</snap>

I suggest to change scan.c as follows:

--- dvb-apps-5e68946b0e0d_orig/util/scan/scan.c 2011-04-10 20:22:52.000000000 +0200
+++ dvb-apps-5e68946b0e0d/util/scan/scan.c      2011-04-11 19:41:21.460000060 +0200
@@ -2570,14 +2570,14 @@
        if ((charset = getenv("LC_ALL")) ||
            (charset = getenv("LC_CTYPE")) ||
            (charset = getenv ("LANG"))) {
-               while (*charset != '.' && *charset)
-                       charset++;
-               if (*charset == '.')
-                       charset++;
-               if (*charset)
-                       output_charset = charset;
-               else
-                       output_charset = nl_langinfo(CODESET);
+               // assuming 'language_country.encoding@variant'
+               char * p;
+
+               if ((p = strchr(charset, '.')))
+                       charset = p + 1;
+               if ((p = strchr(charset, '@')))
+                       *p = 0;
+               output_charset = charset;
        } else
                output_charset = nl_langinfo(CODESET);


This cuts the '@variant' part from charset, so that iconv will find its way.

cheers,
Winfried


-- 
NEU: FreePhone - kostenlos mobil telefonieren und surfen!			
Jetzt informieren: http://www.gmx.net/de/go/freephone
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux