Thread View: pl.comp.lang.perl
6 messages
6 total messages
Started by Mateusz Szczyrzyca
Tue, 07 Jun 2011 14:36
UTF8 w systemie
Author: Mateusz Szczyrzyca
Date: Tue, 07 Jun 2011 14:36
Date: Tue, 07 Jun 2011 14:36
59 lines
1950 bytes
1950 bytes
Mam mały problem, zdawało mi się do tej pory, że w systemie utf8 mam dobrze skonfigurowany. Teraz już nic nie wiem. #v+ $ cat testek Żążółć gęstą jaźń [06-06-2011] [16:30:11] [mateusz@mateusz] [/home/mateusz] $ file testek testek: UTF-8 Unicode text #v- Pliki edytuję vimem, więc: #v+ $ grep utf .vimrc set fileencodings=utf-8 set encoding=utf-8 #v- A ponadto: #v+ $ locale LANG= LC_CTYPE="pl_PL.UTF-8" LC_NUMERIC="pl_PL.UTF-8" LC_TIME="pl_PL.UTF-8" LC_COLLATE="pl_PL.UTF-8" LC_MONETARY="pl_PL.UTF-8" LC_MESSAGES="pl_PL.UTF-8" LC_PAPER="pl_PL.UTF-8" LC_NAME="pl_PL.UTF-8" LC_ADDRESS="pl_PL.UTF-8" LC_TELEPHONE="pl_PL.UTF-8" LC_MEASUREMENT="pl_PL.UTF-8" LC_IDENTIFICATION="pl_PL.UTF-8" LC_ALL=pl_PL.UTF-8 #v- I prosty skrypt pisany w tym vimie w tych locales: #v+ $ cat test.pl #!/usr/bin/perl -w use strict; use warnings; use utf8; use locale; print "Zażółć gęstą jaźń\n"; $ ./test.pl Wide character in print at ./test.pl line 8. Zażółć gęstą jaźń #v- Oczywiście to wszystko z/bez `use utf8` i/lub `use locale` Ten warning od perla psuje mi skrypt CGI, zatem: co tu jest źle? Serio to nie jest w utf8?
Re: UTF8 w systemie
Author: Andrzej Adam Filip
Date: Tue, 07 Jun 2011 15:07
Date: Tue, 07 Jun 2011 15:07
36 lines
2367 bytes
2367 bytes
Mateusz Szczyrzyca <mateusz@abstynenci.pl> pisze: > [...] > I prosty skrypt pisany w tym vimie w tych locales: > > #v+ > $ cat test.pl > #!/usr/bin/perl -w > > use strict; > use warnings; > use utf8; > use locale; > > print "Zażółć gęstą jaźń\n"; > $ ./test.pl > Wide character in print at ./test.pl line 8. > Zażółć gęstą jaźń > #v- > > Oczywiście to wszystko z/bez `use utf8` i/lub `use locale` > > Ten warning od perla psuje mi skrypt CGI, zatem: co tu jest źle? > Serio to nie jest w utf8? To (zapewne) jest w UTF-8 ale perl traktuje STDOUT jako ascii/byte stream. Można temu zaradzić np. linijką poniżej przed "print": binmode(STDOUT,'utf8'); Ja osobiście wolę się trzymać tego że pliki są domyślnie bajtami/oktetami i przełączać jawnie poszczególne pliki/strumienie. Zapewne dostaniesz alternatywne rady jak sobie poradzić z tym warningiem :-) -- Andrzej Adam Filip : anfi@onet.eu : Andrzej.Filip@gmail.com Jasność - podstawowa wartość rzeczy. -- Arystoteles (384-322 p.n.e.)
Re: UTF8 w systemie
Author: Stachu 'Dozzie' K.
Date: Tue, 07 Jun 2011 16:05
Date: Tue, 07 Jun 2011 16:05
34 lines
2020 bytes
2020 bytes
On 2011-06-07, Mateusz Szczyrzyca <mateusz@abstynenci.pl> wrote: > Mam mały problem, zdawało mi się do tej pory, że w systemie utf8 mam > dobrze skonfigurowany. Teraz już nic nie wiem. [...] > I prosty skrypt pisany w tym vimie w tych locales: > > #v+ > $ cat test.pl > #!/usr/bin/perl -w > > use strict; > use warnings; > use utf8; > use locale; > > print "Zażółć gęstą jaźń\n"; > $ ./test.pl > Wide character in print at ./test.pl line 8. > Zażółć gęstą jaźń > #v- Bo `use locale' robi trochę co innego niż ci się wydaje. Zmienia tylko zachowanie paru funkcji i operatorów do porównywania stringów (np. sort(), cmp). To co ty chcesz zrobić, załatwia się przez `use encoding ":locale"' albo (dla przenośności nawet lepiej) przez `use encoding "utf8"'. perldoc perllocale (sekcja "The use locale pragma") perldoc encoding -- Secunia non olet. Stanislaw Klekot
Re: UTF8 w systemie
Author: Mirosław Zalewski
Date: Tue, 07 Jun 2011 19:18
Date: Tue, 07 Jun 2011 19:18
13 lines
1115 bytes
1115 bytes
Koledzy dali Ci wędkę, ja zaś dam rybę:
#v+
use Encode;
print encode("UTF-8", "Zażółć gęstą jaźń\n");
#v-
Alternatywnie możesz po prostu w środowisku produkcyjnym usunąć „use
warnings”, ale to przynajmniej kontrowersyjna decyzja.
--
Niżej podpisany, zamieszkały w http://minio.xt.pl ,
Mirosław Zalewski
Re: UTF8 w systemie
Author: Szymon Sokół
Date: Tue, 07 Jun 2011 21:39
Date: Tue, 07 Jun 2011 21:39
27 lines
2213 bytes
2213 bytes
On Tue, 07 Jun 2011 21:18:16 +0200, Mirosław Zalewski wrote:
> Koledzy dali Ci wędkę, ja zaś dam rybę:
>
> #v+
> use Encode;
>
> print encode("UTF-8", "Zażółć gęstą jaźń\n");
> #v-
>
> Alternatywnie możesz po prostu w środowisku produkcyjnym usunąć „use
> warnings”, ale to przynajmniej kontrowersyjna decyzja.
Metoda Dozziego (ta druga, z "use encoding 'utf8';") jest lepsza (nie wymaga
dawania encode w każdym princie...)
W onelinerach można użyć opcji CLI "-CDS", daje podobny efekt.
Oraz czepię się analnoretentywnie, że zdanie testowe powinno brzmieć "zażółć
*gęślą* jaźń", żeby zawierać wszystkie polskie znaki (w tym "ś"); a że wtedy
jest nieco bez sensu, to ja preferuję inne zdania testowe spośród podanych
na http://hekate-design.pl/test/
--
Szymon Sokół (SS316-RIPE) -- Network Manager B
Computer Center, AGH - University of Science and Technology, Cracow, Poland O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
Free speech includes the right not to listen, if not interested -- Heinlein H
Re: UTF8 w systemie
Author: Mateusz Szczyrzyca
Date: Wed, 08 Jun 2011 11:08
Date: Wed, 08 Jun 2011 11:08
8 lines
1046 bytes
1046 bytes
Dnia 07.06.2011 Mateusz Szczyrzyca <mateusz@abstynenci.pl> napisał/a: > [...] Dzięki wszystkim za odpowiedzi - oczywiście każda okazała się pomocna. Poradziłem z tym problemem na jeszcze inny sposób (jak to w Perlu). Pozdrawiam.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads