Linux C converting file from `UTF-16LE` to `ASCII` code hanging -


मैं एक यूटीएफ-16LE टेक्स्ट फ़ाइल को iconv का उपयोग करके एएससीआईआई में बदलने की कोशिश करता हूं, लेकिन किसी कारण से कोड हमेशा के लिए लटका हुआ है, किसी भी विचार मैं गलत क्या कर रहा हूँ?

  #include & lt; stdio.h & gt; # शामिल करें & lt; iconv.h & gt; #include & lt; string.h & gt; #define S_SIZE (1024) #define bool int #define true 1 #define false 0 int main () {iconv_t icd; फ़ाइल * fp_src, * fp_dst; चार s_src [S_SIZE], एस_ डीएसटी [एस_एसजेईजी]; चार * p_src, * p_dst; Size_t n_src, n_dst; आईसीडी = आईटीसी_ओपेन ("एएससीआईआई", "यूटीएफ-16LE"); Fp_src = fopen ("utf8_test.txt", "आरबी"); Fp_dst = fopen ("ascii_test.txt", "w"); जबकि (सच) {fgets (s_src, S_SIZE, fp_src); अगर (एफओएफ (एफपी_एसआरसी)) तोड़; P_src = s_src; P_dst = s_dst; N_src = strlen (s_src); N_dst = S_SIZE-1; जबकि (0 & lt; n_src) {iconv (आईसीडी, & amp; p_src, & amp; एन_एसआरसी, & amp; p_dst, & amp; n_dst); } * P_dst = '\ 0'; फूटप्रूप्स (एस_ डीएसटी, एफपी_डीएसटी); } Fclose (fp_dst); fclose (fp_src); iconv_close (आईसीडी); वापसी 0; }  

क्या ऐसा हो सकता है क्योंकि एएससीआईआई फाइल को WEOF में ईओएफ और यूटीएफ -16LE में समाप्त कर दिया गया?

ठीक है, आईसीयू पुस्तकालय के साथ एक समाधान मिला।

  #include & lt; stdio.h & gt; # शामिल करें & lt; stdlib.h & gt; #include & lt; यूनिकोड / ustdio.h & gt; # शामिल करें & lt; यूनिकोड / uchar.h & gt; UChar * read_utf8_file (const char * filename, long * size) {/ * पढ़ने के लिए UTF-8 फ़ाइल खोलें / / UFILE * f = u_fopen (फ़ाइल नाम, "आर", NULL, "UTF-16LE"); / * फ़ाइल का आकार प्राप्त करें * / लंबे समय तक आकार; Fseek (u_fgetfile (f), 0, SEEK_END); Fsize = ftell (u_fgetfile (f)); u_frewind (च); / * पूर्ण स्ट्रिंग प्लस टर्मिनेशन * / यूचर * स्ट्रॉ = (यूकेर *) मॉलोक (साइकोफ (यूकेएचआर) * (एफएसआईएपी + 1)) को स्टोर करने के लिए पर्याप्त मेमोरी आवंटित करता है; / * को आवंटित स्थान में स्ट्रिंग पढ़ें * / के लिए ((* आकार) = 0;; u_feof (f); ++ (* आकार)) {str [* आकार] = u_fgetc (f); } / * नल समाप्ति जोड़ें * / str [* आकार] = 0; / * फ़ाइल संसाधन बंद करें / / u_fclose (f); वापसी str; } Int main () {/ * स्ट्रिंग और इसके आकार * / लंबे आकार पढ़ा; UChar * str = read_utf8_file ("utf8_test.txt", और आकार); / * स्ट्रिंग आकार मुद्रित करें / / printf ("स्ट्रिंग आकार:% ld \ n \ n", आकार); / * यूटीएफ -8 स्ट्रिंग प्रिंट करें * / UFILE * u_stdout = u_finit (stdout, NULL, NULL); U_fprintf (u_stdout, "% S \ n", str); u_fclose (u_stdout); / * नि: शुल्क आवंटित स्ट्रिंग * / मुफ्त (एआरआर); वापसी 0; }  

Comments