Portál AbcLinuxu, 11. května 2025 23:08

Dotaz: Kompilace perlu a encoding

14.12.2010 20:24 LuRy | skóre: 12
Kompilace perlu a encoding
Přečteno: 536×
Odpovědět | Admin
Zdarec lidi, mam takovy problem s modulem Encode. Kdyz je program v pl a spousteny perlem neni problem, problem nastane pri stusteni kompilovaneho pl na exe kde to do konzole vypisuje

Use of uninitialized value $x in scalar assignment at PERL2EXE_STORAGE/utf8_heavy.pl line 242. Use of uninitialized value $x in pattern match (m//) at PERL2EXE_STORAGE/utf8_heavy.pl line 243. Unknown encoding 'CP852' at c:\Robotek\plbot2.4/nastaveni.pl line 88

Onen problemovy kod je
use Encode; 

sub vypis {
	my $testext = shift;
	$testext = decode("UTF8",$testext);
	$testext = encode("CP852",$testext);
	print $testext;
}

&vypis("Něco s háčkama");
V podstatě jde mi o to aby program v perlu dokázal vypisovat korektne hačky/čárky do konzole. Kompilator Perl2Exe V9.110 registrovany. Perl 5.10.1 a je to kompilovano na W7.

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.12.2010 22:40 LuRy | skóre: 12
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
Odpovědět | | Sbalit | Link | Blokovat | Admin
nebo pripadne jak udelat jinak kodovani bez encode/decode.. UTF-8 -> CP1250 (predelal sem program pouzivam modul s ansi a prekopal to nejak ze vystup je v poradku s cp1250 misto cp852)
21.12.2010 12:45 "Die Peitsche" | Praha
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
use strict;
use warnings;
use utf8;

use Encode;

sub vypis {
    my $testext = decode_utf8(shift);

    return encode("CP852",$testext);
}

print vypis("Něco s háčkama");
Soubor musi samozrejme byt v utf8 encoding.
21.12.2010 18:13 "Die Peitsche" | Praha
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
Kdyz on ten encode/decode je ta spravna™ cesta.

Clovek si proste musi uvedomit, ze retez konverze je vzdy ENCODING-vstup -> octets -> ENCODING-vystup

pro ENCODING-vstup -> octets potrebuju "decode"

pro octets -> ENCODING-vystup potrebuju "encode"

Jinak by samozrejme jeste slo:
`recode UTF-8..CP1250 $file`;
;-)
# recode --help
Free `recode' converts files between various character sets and surfaces.
...
wamba avatar 14.12.2010 23:39 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
Odpovědět | | Sbalit | Link | Blokovat | Admin
use encoding "utf8", STDOUT => "cp852";

sub vypis {
	my $testext = shift;
	print $testext;
}

&vypis("Něco s háčkama");
nestačí něco takového?
This would have been so hard to fix when you don't know that there is in fact an easy fix.
15.12.2010 00:16 LuRy | skóre: 12
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
tohle uz jsem taky zkousel a hlasilo mi to chyby kuli wide characters..
15.12.2010 00:20 LuRy | skóre: 12
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
Wide character in print at C:\PerlA/skript.pl line 1241. Wide character in send at C:/Perl/lib/IO/Socket.pm line 270.

na radku 1241 je "print LOG "$text\n";" kdyz sem to zakomentoval vyhodilo to chybku jinde... mam pocit ze tomu vadej znaky "ž ř" jinak chyba v socketu zustala
15.12.2010 22:48 LuRy | skóre: 12
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vyřešeno ..

použil sem
require 'unicore/lib/gc_sc/Digit.pl'; # odstrani error s utf8_heavy

# to ostatni
require 'Encode.pm';
require 'Encode/Alias.pm';
require 'Encode/Byte.pm';
require 'Encode/Config.pm';
require 'Encode/Encoding.pm';
15.12.2010 22:57 LuRy | skóre: 12
Rozbalit Rozbalit vše Re: Kompilace perlu a encoding
vlastne u toho encode staci jenom

require 'Encode/Byte.pm';

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.