zoukankan      html  css  js  c++  java
  • 在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.
    ", fromCode, toCode);
            else
                printf("Unknown error.
    ");
        }
        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] = '';
                    printf(destinationBuffer);
                    fwrite(destinationBuffer, sizeof(char), characterCount, outputFile);
                    free(sourceBuffer);
                    free(destinationBuffer);
                    fclose(outputFile);
                }
                else
                    printf("Cannot open file: %s.
    ", filename);
                fclose(inputFile);
            }
            else
                printf("Cannot open file: %s.
    ", filename);
            iconv_close(conversionDescriptor);
        }
        system("pause");
        return 0;
    }

    参考链接:unnonouno/iconvpp: wrapper library of iconv for c++

  • 相关阅读:
    DAY-4 Linux基础及常用命令(1)
    DAY-3 计算机基础之网络
    DAY-2 计算机基础之操作系统
    DAY-1 计算机基础
    梅花作品欣赏
    简洁大气网址(国外)跟设计大学的案例很像
    animate css3 应用的借鉴,一个同事写的JS
    漂亮的素材
    几个不错的素材站
    正式开始我的技术生涯
  • 原文地址:https://www.cnblogs.com/buyishi/p/9322864.html
Copyright © 2011-2022 走看看