iconv(3) Library Functions Manual iconv(3) NUME iconv - efectueaza conversia setului de caractere BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include size_t iconv(iconv_t cd, char **restrict inbuf, size_t *restrict inbytesleft, char **restrict outbuf, size_t *restrict outbytesleft); DESCRIERE Funcia iconv() convertete o secvena de caractere dintr-o codificare de caractere intr-o secvena de caractere dintr-o alta codificare de caractere. Argumentul cd este un descriptor de conversie, creat anterior printr-un apel la iconv_open(3); descriptorul de conversie definete codificarile de caractere pe care iconv() le utilizeaza pentru conversie. Argumentul inbuf este adresa unei variabile care indica primul caracter din secvena de intrare; inbytesleft indica numarul de octei din memoria tampon respectiva. Argumentul outbuf este adresa unei variabile care indica primul octet disponibil in memoria tampon de ieire; outbytesleft indica numarul de octei disponibili in memoria tampon de ieire. Cazul principal este atunci cand inbuf nu este NULL i *inbuf nu este NULL. In acest caz, funcia iconv() convertete secvena de mai muli octei care incepe la *inbuf intr-o secvena de mai muli octei care incepe la *outbuf. Vor fi citii cel mult *inbytesleft octei, incepand de la *inbuf. Se vor scrie cel mult *outbytesleft octei, incepand de la *outbuf. Funcia iconv() convertete cate un caracter multi-octet la un moment dat i, pentru fiecare convertire de caracter, marete *inbuf i descrete *inbytesleft cu numarul de octei de intrare convertii, marete *outbuf i descrete *outbytesleft cu numarul de octei de ieire convertii i actualizeaza starea de conversie coninuta in cd. In cazul in care codificarea caracterelor de intrare este de tip statutar, funcia iconv() poate, de asemenea, sa converteasca o secvena de octei de intrare intr-o actualizare a starii de conversie fara a produce niciun octet de ieire; o astfel de intrare se numete secvena ,,shift". Conversia se poate opri din cinci motive: o O secvena multi-octet nevalida este intalnita la intrare. In acest caz, configureaza errno la EILSEQ i returneaza (size_t) -1. *inbuf ramane indreptat spre inceputul secvenei multi-octet nevalide. o Se intalnete o secvena multi-octet care este valida, dar care nu poate fi convertita in codificarea caracterelor de ieire. Aceasta condiie depinde de implementare i de descriptorul de conversie. In biblioteca GNU C i GNU libiconv, daca cd a fost creat fara sufixul //TRANSLIT sau //IGNORE, conversia este stricta: conversiile cu pierderi produc aceasta condiie. Daca a fost specificat sufixul //TRANSLIT, transliterarea poate evita aceasta condiie in unele cazuri. In biblioteca musl C, aceasta condiie nu poate aparea deoarece se utilizeaza o conversie in '*' ca soluie de rezerva. Nici in implementarile FreeBSD, NetBSD i Solaris ale iconv() nu poate aparea aceasta condiie, deoarece se utilizeaza o conversie in '?' ca soluie de rezerva. Atunci cand aceasta condiie este indeplinita, iconv() stabilete errno la EILSEQ i returneaza (size_t) -1. *inbuf este lasata indicand inceputul secvenei multi-octet neconvertibile. o Secvena de octei de intrare a fost convertita in intregime, adica *inbytesleft a coborat la 0. In acest caz, iconv() returneaza numarul de conversii nereversibile efectuate in timpul acestui apel. o O secvena de mai muli octei incompleta este intalnita la intrare, iar secvena de octei de intrare se termina dupa ea. In acest caz, se stabilete errno la EINVAL i se returneaza (size_t) -1. *inbuf ramane indreptat spre inceputul secvenei multi-octet incomplete. o Memoria tampon de ieire nu mai are loc pentru urmatorul caracter convertit. In acest caz, configureaza errno la E2BIG i returneaza (size_t) -1. Un caz diferit este atunci cand inbuf este NULL sau *inbuf este NULL, dar outbuf nu este NULL i *outbuf nu este NULL. In acest caz, funcia iconv() incearca sa fixeze starea de conversie a lui cd la starea iniiala i sa stocheze o secvena de transformare corespunzatoare in *outbuf. Se vor scrie cel mult *outbytesleft octei, incepand de la *outbuf. Daca memoria tampon de ieire nu mai are loc pentru aceasta secvena de reiniializare, configureaza errno la E2BIG i returneaza (size_t) -1. In caz contrar, se incrementeaza *outbuf i se decrementeaza *outbytesleft cu numarul de octei scrii. Un al treilea caz este atunci cand inbuf este NULL sau *inbuf este NULL, iar outbuf este NULL sau *outbuf este NULL. In acest caz, funcia iconv() stabilete starea de conversie a lui cd la starea iniiala. VALOAREA RETURNATA Funcia iconv() returneaza numarul de caractere convertite intr-un mod nereversibil in timpul acestui apel; conversiile reversibile nu sunt luate in considerare. In caz de eroare, iconv() returneaza (size_t) -1 i configureaza errno pentru a indica eroarea. ERORI-IEIRE Pot aparea, printre altele, urmatoarele erori: E2BIG Nu exista spaiu suficient la *outbuf. EILSEQ O secvena multi-octet nevalida a fost intalnita la intrare. EINVAL O secvena multi-octet incompleta a fost intalnita la intrare. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +------------------------------+---------------------+-----------------+ |Interfaa | Atribut | Valoare | +------------------------------+---------------------+-----------------+ |iconv() | Sigurana firelor | MT-Safe race:cd | +------------------------------+---------------------+-----------------+ Funcia iconv() este MT-Safe, atata timp cat apelanii iau masuri de excludere reciproca pentru argumentul cd. STANDARDE POSIX.1-2008. ISTORIC glibc 2.1. POSIX.1-2001. NOTE In fiecare serie de apeluri catre iconv(), ultimul ar trebui sa fie unul cu inbuf sau *inbuf egal cu NULL, pentru a elimina orice intrare parial convertita. Dei inbuf i outbuf sunt tipizate ca char **, acest lucru nu inseamna ca obiectele pe care le indica pot fi interpretate ca iruri de caractere C sau ca matrice de caractere: interpretarea secvenelor de octei de caractere este gestionata in mod intern de catre funciile de conversie. In unele codificari, un octet zero poate fi o parte valida a unui caracter multi-octet. Cel care apeleaza iconv() trebuie sa se asigure ca indicatorii trecui in funcie sunt adecvai pentru accesarea caracterelor din setul de caractere corespunzator. Aceasta include asigurarea alinierii corecte pe platformele care au restricii stricte privind alinierea. CONSULTAI I iconv_close(3), iconv_open(3), iconvconfig(8) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 iconv(3)