Portál AbcLinuxu, 12. května 2025 10:48
Potřebuji převést string - řetězec znaků z UTF-8 na cp1250 a nevím jak na to - jakou funkci použít v C.
Kdyby to bylo pouze překodování znaku je to bez problému, ale problém je že je to UTF-8 takže tam znak může být různě dlouhý a na to nevím jakou funkci v C použít - nikdy jsem s unicode nedělal.
Nebo to převést na pevnou délku tj UTF-8 na UNICODE (UTF-16) a porovnávat to potom a nahrazovat ?
Prostě mám program který mi převádí data z linuxu pro PocketPC a potřebuji překodovat znakovou sadu.
možná vám pomůže man 3 iconv
Nebo to převést na pevnou délku tj UTF-8 na UNICODE (UTF-16) a porovnávat to potom a nahrazovat ?
BTW., UTF-16 není Unicode (je to formát kódování používané pro kódování Unicode) a UTF-16 nemá pevnou délku znaků.
Jasně trochu se v tom ještě neorientuji pod MS-DOS jsem s UNICODE nedělal v tu dobu nebyl.
iconv()? viz Wikipedie
Jasně to asi bude ono - jdu se na to kouknout co to dělá.....
#define DELKA_POZNAMKY 256 char convStr[DELKA_POZNAMKY]; ........... /* převod kodování */ char * UTF8toWindows (char * from) { char *p1, *p2; iconv_t i; size_t fromlen, tolen; size_t iconv_value; errno=0; if (strlen(from) > DELKA_POZNAMKY) { perror("ICONV: Poznámka je moc dlouhá."); exit(errno); } memset(convStr,0,sizeof(convStr)); tolen = fromlen = strlen(from); p1 = (char *)from; p2 = (char *)convStr; i = iconv_open("WINDOWS-1250", "UTF-8"); if (i == (iconv_t) -1) { if (errno == EINVAL) perror("ICONV: Nepodporuji převod z UTF-8 do CP1250."); else perror("ICONV: Chyba převodu kodování."); exit(errno); } /* Převod */ /* iconv_value = iconv(i, (const char **)&p1, &fromlen, &p2, &tolen); */ iconv_value = iconv(i, &p1, &fromlen, &p2, &tolen); if (iconv_value == (size_t) -1) { perror ("ICONV: Převod kodování se nepovedl."); exit(errno); } iconv_close(i); return(convStr); } ........
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.