在C語言中使用libiconv進行編碼轉換的示例


libiconv_sample.c

#include <stdio.h>
#include <malloc.h>
#include "libiconv/iconv.h"
#ifdef _DEBUG
#pragma comment(lib, "libiconv/libiconvd.lib")
#else
#pragma comment(lib, "libiconv/libiconv.lib")
#endif
#define BUFFER_SIZE 10 * 1024 * 1024
int main()
{
    const char *toCode = "GBK", *fromCode = "UTF-8";
    iconv_t conversionDescriptor = iconv_open(toCode, fromCode);
    if ((iconv_t)-1 == conversionDescriptor)
    {
        if (errno == EINVAL)
            printf("Not supported from %s to %s.\n", fromCode, toCode);
        else
            printf("Unknown error.\n");
    }
    else
    {
        const char *filename = "text_utf-8.txt";
        FILE *inputFile = fopen(filename, "r");
        if (inputFile)
        {
            filename = "text_gbk.txt";
            FILE *outputFile = fopen(filename, "w");
            if (outputFile)
            {
                char *sourceBuffer = (char *)malloc(sizeof(char) * BUFFER_SIZE);
                const char *sourcePtr = sourceBuffer;
                size_t destinationBufferSize = BUFFER_SIZE * 2, availableSpaceOfDestinationBuffer = destinationBufferSize;
                char *destinationBuffer = (char *)malloc(sizeof(char) * destinationBufferSize), *destinationPtr = destinationBuffer;
                size_t numberOfCharactersRead = fread(sourceBuffer, sizeof(char), BUFFER_SIZE, inputFile);
                iconv(conversionDescriptor, &sourcePtr, &numberOfCharactersRead, &destinationPtr, &availableSpaceOfDestinationBuffer);
                size_t characterCount = destinationBufferSize - availableSpaceOfDestinationBuffer;
                destinationBuffer[characterCount] = '\0';
                printf(destinationBuffer);
                fwrite(destinationBuffer, sizeof(char), characterCount, outputFile);
                free(sourceBuffer);
                free(destinationBuffer);
                fclose(outputFile);
            }
            else
                printf("Cannot open file: %s.\n", filename);
            fclose(inputFile);
        }
        else
            printf("Cannot open file: %s.\n", filename);
        iconv_close(conversionDescriptor);
    }
    system("pause");
    return 0;
}

參考鏈接:unnonouno/iconvpp: wrapper library of iconv for c++


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM