From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mx1.redhat.com ([209.132.183.28]:23177 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754775Ab1DKSYh (ORCPT ); Mon, 11 Apr 2011 14:24:37 -0400 Message-ID: <4DA3475F.50607@redhat.com> Date: Mon, 11 Apr 2011 15:24:31 -0300 From: Mauro Carvalho Chehab MIME-Version: 1.0 To: handygewinnspiel@gmx.de CC: linux-media@vger.kernel.org Subject: Re: dvb-apps: charset support References: <4D9C5C4D.4040709@redhat.com> <20110411174841.268990@gmx.net> In-Reply-To: <20110411174841.268990@gmx.net> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit List-ID: Sender: Em 11-04-2011 14:48, handygewinnspiel@gmx.de escreveu: > 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'. Ah, ok. I never saw such syntax. Thanks for pinging me about that! > > > 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 > > > 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; This will fail if LANG=C Basically, if charset doesn't contain '.', this block should not set output_charset. > } else > output_charset = nl_langinfo(CODESET); > > > This cuts the '@variant' part from charset, so that iconv will find its way. > > cheers, > Winfried > >