isprint() vs diakriticka znamenka

Michal Hucik chaky na goliash.inext.cz
Pondělí Září 7 07:57:35 CEST 1998


Hi,
	poslal jsem autorovi builderu 'glade' (GUI v gtk) bug report, ve
kterem jsem si stezoval na to, ze pokud napisu nejaky label v cestine, tak
dojde pri vytvareni zdrojoveho kodu k prekodovani diakritickych znamenek na
hexakody, na coz reaguje gcc pri kompilaci warningem 'escape sequence out of
range for character' a cestina je ve vyslednem kodu uplne rozbita ...
Pozadal mne o patch, ale i kdyz se jedna o zcela banalni problem, tak si
nejsem tak uplne jisty tim, jake reseni je korektni.

Puvodni kod:
----------------
gchar	*p;
gchar	escape_buffer[16];

...
...
...

if(isprint(*p)) 
	/*char se nezmeni a zapise se do vystupu*/
else {
	sprintf (escape_buffer, "\\x%02x", *p);
	/* do vystupu se zapise escape_buffer */
}
----------------

Mozna oprava:
----------------
if((unsigned char) *p >= ' ')
	/*char se nezmeni a zapise se do vystupu*/
else
	sprintf (escape_buffer, "\\x%02x",(unsigned char) *p);
	/* do vystupu se zapise escape_buffer */
}
----------------

Tato oprava funguje spravne, ale nejsem si tak uplne jisty tim, ze bude
chodit napr. v japonske lokalizaci, nebo na jinych OS ... Neda se nejak
vycucnout z locales to, ktere znaky jsou printable?

Ahoj -
	Michal
--
   "http://www.inext.cz/www/chaky/", "mailto:chaky na vs.inext.cz"

    ---===   Beskyde, Beskyde, kdo po tobe SCSI ... ?   ===---


Další informace o konferenci Linux