Is there a way to convert from UTF8 to ISO-8859-1?

前端 未结 3 902
轻奢々
轻奢々 2020-12-02 00:26

My software is getting some strings in UTF8 than I need to convert to ISO 8859 1. I know that UTF8 domain is bigger than ISO 8859. But the data in UTF8 has been previously

3条回答
  •  無奈伤痛
    2020-12-02 00:35

    iconv - perform character set conversion

    size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);

    iconv_t iconv_open(const char *tocode, const char *fromcode);

    tocode is "ISO_8859-1" and fromcode is "UTF-8".

    Working example:

    #include 
    #include 
    
    int main (void) {
        iconv_t cd = iconv_open("ISO_8859-1", "UTF-8");
        if (cd == (iconv_t) -1) {
            perror("iconv_open failed!");
            return 1;
        }
    
        char input[] = "Test äöü";
        char *in_buf = &input[0];
        size_t in_left = sizeof(input) - 1;
    
        char output[32];
        char *out_buf = &output[0];
        size_t out_left = sizeof(output) - 1;
    
        do {
            if (iconv(cd, &in_buf, &in_left, &out_buf, &out_left) == (size_t) -1) {
                perror("iconv failed!");
                return 1;
            }
        } while (in_left > 0 && out_left > 0);
        *out_buf = 0;
    
        iconv_close(cd);
    
        printf("%s -> %s\n", input, output);
        return 0;
    }
    

提交回复
热议问题