Kezdőlap › Fórumok › Vegyes gondok › Magyar betűk
- This topic has 68 hozzászólás, 5 résztvevő, and was last updated 17 years, 5 months telt el by
uzsolt.
-
SzerzőBejegyzés
-
2008-01-25-18:32 #2151483
„Tehát a tanulság: ő még jól megkapja.”
Ezen ne csodálkozz, hiszen ez csak egy bináris adat.
Azt kell megkeresni, ami a bináris adatból text-et csinál.
De nem ír ki konzolra semmi hibát? (Vagy nem lehet valami debug sz@rral így leforgatni…)2008-01-25-18:32 #2151484„Tehát a tanulság: ő még jól megkapja.”
Ezen ne csodálkozz, hiszen ez csak egy bináris adat.
Azt kell megkeresni, ami a bináris adatból text-et csinál.
De nem ír ki konzolra semmi hibát? (Vagy nem lehet valami debug sz@rral így leforgatni…)2008-01-27-08:27 #2151485Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezutánCode:echo 0 widget_tell tb_gmail áom | awesome-clientÉs megjelent az „álom”!
Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…2008-01-27-08:27 #2151486Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezutánCode:echo 0 widget_tell tb_gmail áom | awesome-clientÉs megjelent az „álom”!
Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…2008-01-27-14:16 #2151487Valoban:
http://cairographics.org/manual/cairo-Text.html#cairo-show-textEloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)
Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.
2008-01-27-14:16 #2151488Valoban:
http://cairographics.org/manual/cairo-Text.html#cairo-show-textEloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)
Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.
2008-01-27-16:51 #2151489na most elvileg két megoldás van:
1) LC_ALL=…utf… (ezután minden program utf-et vár; a nem utf-es kódolású nem latin karakterek illegálisak)
2) LC_ALL=…nem utf… (ezek után minden program 1 byte-os karaktert vár; a nem latin kódolás nem lesz illegális, legfeljebb nem ugyanaz a betű jelenik, meg, ha a körny változó és paraméter kódolása nem ugyanaz, illetve utf paraméter esetén két karakter fog megjelenni)2008-01-27-16:51 #2151490na most elvileg két megoldás van:
1) LC_ALL=…utf… (ezután minden program utf-et vár; a nem utf-es kódolású nem latin karakterek illegálisak)
2) LC_ALL=…nem utf… (ezek után minden program 1 byte-os karaktert vár; a nem latin kódolás nem lesz illegális, legfeljebb nem ugyanaz a betű jelenik, meg, ha a körny változó és paraméter kódolása nem ugyanaz, illetve utf paraméter esetén két karakter fog megjelenni)2008-01-27-17:35 #2151491zoltan22 wrote:Valoban:
http://cairographics.org/manual/cairo-Text.html#cairo-show-textEloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)
Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.
Nem megy, sajna. A példa szerintem rossz, mert egy szimpla progiba beraktam:
Code:#include
#include
#includewchar_t * locale_to_wchar(char * str)
{
wchar_t * ptr;
size_t s;/* first arg == NULL means ‘calculate needed space’ */
s = mbstowcs(NULL, str, 0);/* a size of -1 is triggered by an error in encoding; never
* happen in ISO-8859-* locales, but possible in UTF-8 */
if(s == -1)
return(NULL);/* malloc the necessary space */
if((ptr = (wchar_t *)malloc((s + 1) * sizeof(wchar_t))) == NULL)
return(NULL);
printf(„%dn”,s);/* really do it */
mbstowcs(ptr, str, 100);/* ensure NULL-termination */
ptr[s] = L”;
/* remember to free() ptr when done */
return(ptr);
}void main () {
char *str;
wchar_t *uni;setlocale(LC_ALL, „hu_HU”);
str=malloc(300);
str=”ödön”;
uni=locale_to_wchar(str);
if (uni==NULL) { printf(„nulln”); } else {printf(„%sn”,uni);}
}Kiírja, hogy 4 hosszú az ödön, de csak egy „ö” betűt nyom ki.
Az LC_ALL=…utf… nem jó, mivel ekkor valami rejtélyes ok miatt a tasklist-ekben SEMMI nem jelenik meg, még akkor se, ha nincs benne semmi fura karakter. A sima szövegdobozokba küldött szövegek jól megjelennek.
Szóval a zoltan22 által ajánlott megoldást akarnám én megvalósítani…2008-01-27-17:35 #2151492zoltan22 wrote:Valoban:
http://cairographics.org/manual/cairo-Text.html#cairo-show-textEloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)
Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.
Nem megy, sajna. A példa szerintem rossz, mert egy szimpla progiba beraktam:
Code:#include
#include
#includewchar_t * locale_to_wchar(char * str)
{
wchar_t * ptr;
size_t s;/* first arg == NULL means ‘calculate needed space’ */
s = mbstowcs(NULL, str, 0);/* a size of -1 is triggered by an error in encoding; never
* happen in ISO-8859-* locales, but possible in UTF-8 */
if(s == -1)
return(NULL);/* malloc the necessary space */
if((ptr = (wchar_t *)malloc((s + 1) * sizeof(wchar_t))) == NULL)
return(NULL);
printf(„%dn”,s);/* really do it */
mbstowcs(ptr, str, 100);/* ensure NULL-termination */
ptr[s] = L”;
/* remember to free() ptr when done */
return(ptr);
}void main () {
char *str;
wchar_t *uni;setlocale(LC_ALL, „hu_HU”);
str=malloc(300);
str=”ödön”;
uni=locale_to_wchar(str);
if (uni==NULL) { printf(„nulln”); } else {printf(„%sn”,uni);}
}Kiírja, hogy 4 hosszú az ödön, de csak egy „ö” betűt nyom ki.
Az LC_ALL=…utf… nem jó, mivel ekkor valami rejtélyes ok miatt a tasklist-ekben SEMMI nem jelenik meg, még akkor se, ha nincs benne semmi fura karakter. A sima szövegdobozokba küldött szövegek jól megjelennek.
Szóval a zoltan22 által ajánlott megoldást akarnám én megvalósítani… -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz