• C

Save file as UTF-8

Hi..

I have been trying to save a file as UTF-8 in C programming language but.. no chance. can not get it.

Can you please tell me how to do it? It is the only think that is missing to finish.

Thanks!
#include <stdio.h>
#include <string.h>

#define MAX_LEN_SINGLE_LINE     120   // ?

int main(int argc, char **argv[] )
{
     /*setlocale("LC_ALL", "pt_PT.utf8");*/
    
    if (argc < 3)
    {
     printf("\n REPLACER_vM :: Deve especificar [ficheiro_alvo.ext] [ficheiro_destino.ext] \n");   
          
     return 0;
             
    }
    else
    {
        printf("[ficheiro_alvo] %s \n", argv[1]);
        printf("[ficheiro_destino] %s \n", argv[2]);
        
    }   
    
    /* const char fileOrig[32] = "ficheiro1.csv"; */
    /* const char fileRepl[32] = "ficheiro2.idl"; */

    char fileOrig[99];
    strncpy( fileOrig, argv[1], 99 );
    
    char fileRepl[99];
    strncpy( fileRepl, argv[2], 99 );
    
    const char text2find[80] = ";";
    const char text2repl[80] = "|";

    char buffer[MAX_LEN_SINGLE_LINE+2];
    char *buff_ptr, *find_ptr;
    
    FILE *fp1, *fp2;
    
    size_t find_len = strlen(text2find);

    fp1 = fopen(fileOrig,"r");
    fp2 = fopen(fileRepl,"w");

    while(fgets(buffer,MAX_LEN_SINGLE_LINE+2,fp1))
    {
        buff_ptr = buffer;
        while ((find_ptr = strstr(buff_ptr,text2find)))
        {
            while(buff_ptr < find_ptr)
                fputc((int)*buff_ptr++,fp2);

            fputs(text2repl,fp2);

            buff_ptr += find_len;
        }
        fputs(buff_ptr,fp2);
    }

    fclose(fp2);
    fclose(fp1);

    return 0;
}

Open in new window

vmorais_Asked:
Who is Participating?
 
HappyCactusConnect With a Mentor Commented:
You cannot this way, because C (and C++) only know about char format, not about charsets.
C in particular, does dial only with one-byte chars, and treat it as ASCII charsets.
You must use an external library such as libiconv[1].
Use iconv_open() to open the file, iconv() to make the conversion (if needed), write the new file and close it.
Pay attention that every time you want to refer to a character from code, you must use it with the right value within the charset selected.

[1] http://www.gnu.org/software/libiconv/

0
 
vmorais_Author Commented:
Can't find how to install that library on Bloodshed DevC++.

I'm using Win32.
0
 
HappyCactusCommented:
Have you tried this one? [1]


[1] http://sourceforge.net/projects/devpaks/files/
0
KuppingerCole Reviews AlgoSec in Executive Report

Leading analyst firm, KuppingerCole reviews AlgoSec's Security Policy Management Solution, and the security challenges faced by companies today in their Executive View report.

 
vmorais_Author Commented:
Have just successfully installed using the given link.

I am trying to use iconv_open() and incov() in my code, but still can't get it.
0
 
HappyCactusCommented:
what is your problem? Can you post some code and some testing output?
0
 
vmorais_Author Commented:
for example, what parameters receive these functions?

iconv_open("filename.ext"); | in this case iconv_open(argv[2])

iconv("ANSI", "UTF-8");
0
 
HappyCactusCommented:
See this:

http://www.manpagez.com/man/3/iconv/
http://www.manpagez.com/man/3/iconv_open/

In brief, you create a translation table with iconv_open("ANSI","UTF-8"), then read the file in a buffer, and pass that buffer to iconv, then write the output buffer into the new file.

0
 
evilrixSenior Software Engineer (Avast)Commented:
This question has been classified as abandoned and is being closed as part of the Cleanup Program. See my comment at the end of the question for more details.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.