1.[代码]safe_iconv.c

/* 在 Windows 下有许多编码是GB18030、 后缀是 cue 的文本文件,将其移到 Linux 下使用 shell 命令:

find . -type f -name "*.cue" -exec iconv -f gb18030 -t utf8 -o {} {} \;

目的是找到当前目录下所有cue文件并转码,然后替换原文件。当 iconv 转码失败时,仍然会将垃圾数据写入原文件。

而新的 safe_iconv 在转码失败时不修改原代码。safe_iconv 只适合用于小于 BUFSIZE 的文件:

find . -type f -name "*.cue" -exec safe_iconv -f gb18030 -t utf8 -o {} {} \;

*/

#include

#include

#include

#include

enum {BUFSIZE = 4096};

static iconv_t cd;

static char* fromcode;

static char* tocode;

static char* infilename;

static char* outfilename;

static char inbuf[BUFSIZE];

static char outbuf[BUFSIZE];

static FILE* fin;

static FILE* fout;

int cmdline_parsed(int argc, char*const* argv)

{

int opt;

opterr = 0;

while ( (opt=getopt(argc, argv, "f:t:o:l")) != -1 )

{

switch (opt) {

case 'f': fromcode = optarg; break;

case 't': tocode = optarg; break;

case 'o': outfilename = optarg; break;

case 'l': system("iconv -l"); return 0; //当然必须安装有 iconv。

case '?': fprintf(stderr, "error: option is \'?\'\n"); return 0;

}

}

if (! (fromcode && tocode)) {

fprintf(stderr, "error: \'fromcode\' or \'tocode\' is null.\n");

return 0;

}

infilename = argv[optind];

return 1;

}

size_t file_size(FILE* fin)

{

size_t r;

fseek(fin, 0, SEEK_END);

r = ftell(fin);

fseek(fin, 0, SEEK_SET);

return r;

}

int main(int argc, const char** argv)

{

char* pinbuf = inbuf;

char* poutbuf = outbuf;

size_t inbytesleft;

size_t outbytesleft;

size_t count;

if (! cmdline_parsed(argc, (char*const*)argv)) {

return EXIT_FAILURE;

}

cd = iconv_open(tocode, fromcode);

if (cd == (iconv_t)-1) {

fprintf(stderr, "error: f=\'%s\' t=\'%s\' i=\'%s\' o=\'%s\'\n",

fromcode, tocode, infilename, outfilename);

return EXIT_FAILURE;

}

fin = fopen(infilename, "r");

if (! fin) {

fprintf(stderr, "error: \'fopen(%s, \"r\")\'\n", infilename);

return EXIT_FAILURE;

}

inbytesleft = file_size(fin);

if (inbytesleft > BUFSIZE) {

fprintf(stderr, "error: \'%d > BUFSIZE\'\n", inbytesleft);

return EXIT_FAILURE;

}

fread(inbuf, 1, inbytesleft, fin);

outbytesleft = BUFSIZE;

count = iconv(cd, &pinbuf, &inbytesleft, &poutbuf, &outbytesleft);

if (count == (size_t)-1) {

fprintf(stderr, "error: \'iconv()\'\n");

return EXIT_FAILURE;

}

if (outfilename == NULL) {

//printf("%d %d\n", inbytesleft, outbytesleft);

printf("%s", outbuf);

}

else {

fout = fopen(outfilename, "w");

if (! fout) {

fclose(fin);

fprintf(stderr, "error: \'fopen(%s, \"w\")\'\n", outfilename);

return EXIT_FAILURE;

}

fwrite(outbuf, 1, BUFSIZE - outbytesleft, fout);

fclose(fout);

}

fclose(fin);

return EXIT_SUCCESS;

}

mysql实现gb18030转utf8_将编码是GB18030的小文件转为UTF8相关推荐

  1. python3 gb2312转utf8_字符编码和python使用encode,decode转换utf-8, gbk, gb2312

    python3 爬取网页报错:'gb2312' codec can't decode byte 0xb5 in position 154969: illegal multibyte sequence ...

  2. c++ uint32转为int_【转】用python将GBK编码文件转为UTF-8编码文件

    学习资料: 字符集与字符编码 - 网易云课堂​study.163.com 有的时候我们有一些网页的项目,需要用到JavaScript读取一些文本文件,用以读取数据:但各种文本文件的编码方式不尽相同,特 ...

  3. 用python将GBK编码文件转为UTF-8编码文件

    有的时候我们有一些网页的项目,需要用到JavaScript读取一些文本文件,用以读取数据:但各种文本文件的编码方式不尽相同,特别是带有中文字符的文件,为GBK编码,一般加载后都会出现乱码情况,故需要在 ...

  4. 将unicode编码的txt文件转为utf-8编码

    利用codes编写: # coding=UTF-8import stringimport codecsdef changecode(): tt=codecs.open('c:\\111.txt','r ...

  5. java 上传文件编码_(java)有什么办法把MultipartFile上传的文件转为utf-8的编码吗

    [Java] 纯文本查看 复制代码import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc ...

  6. java文件全是数字编码_批量将Java源代码文件的编码从GBK转为UTF-8

    最近在做一个项目,需要从以前的另外一个项目迁移大量源代码过来,但是由于另一个项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息都出现 ...

  7. mysql数据库latin1转utf8_三种转换Mysql数据库数据编码的窍门-latin1转utf8

    背景:某个操作系统的Mysql数据库数据库Databnsednname采用默认的latin1字符集,操作系统升级需求将所有数据转换成utf-8各式,目的数据库Databnse为newdbname(建库 ...

  8. 怎么设置php.ini允许sql语句插入空值到mysql里_php读取.sql文件,写入mysql,navicat显示乱码,编码设置...

    案例: php文件:install.php --------编码:php保存文件的编码.php header编码.php程序的默认编码.php写入数据库的编码 php读取的sql代码文件:php.sq ...

  9. mysql concat 不同字符集_字符编码 - 如何将整个MySQL数据库字符集和排序规则转换为UTF-8?...

    字符编码 - 如何将整个MySQL数据库字符集和排序规则转换为UTF-8? 如何将整个MySQL数据库字符集转换为UTF-8并将整理转换为UTF-8? 17个解决方案 591 votes 使用utf8 ...

最新文章

  1. Docker虚拟化解析
  2. oracle 触发器 upsert,数据库管理员
  3. Js文件中调用其它Js函数的方法
  4. axios获取图片显示_vue中使用axios post上传头像/图片并实时显示到页面的方法
  5. 使用pm2启动Node和Vue项目教程
  6. javaweb学习中的路径问题
  7. 为Mac安装homebrew
  8. Java零基础入门 : (2) 代码编辑器IDEA安装与配置
  9. 关于 MySQL 8.0 新特性“隐藏索引”的一点思考
  10. android遍历图片,Android获取手机所有图片并显示
  11. Django打造大型企业官网-项目实战(二)
  12. 《纽约邮报》手机客户端推送系统被黑 黑客发送抒情诗
  13. oracle导入dmp报20000,imp导入dmp文件报:IMP-00038: 无法转换为环境字符集句柄IMP-00000: 未成功终止导入...
  14. 51单片机通过74HC595控制8位数码管,在任意位置显示数字
  15. 区块链金融的现状与展望
  16. Go语言(golang)的错误(error)处理的推荐方案
  17. ubuntu22.04运行qq音乐
  18. 下午茶,几个笑话提提神
  19. 第2章第6节:使用Slider滑杆在指定的范围内选择一个数值 [SwiftUI快速入门到实战]
  20. 中国研制成功人工智能探地雷达 可为地下空间做“体检”

热门文章

  1. oracle flashback table 参数,Oracle10g中FLASHBACK TABLE语句恢复DML误操作
  2. python开发需要掌握的知识_(深度学习)Python必须掌握基础知识,python,必会,知识点...
  3. Java 18 都要来了,你不会还在用Java 8吧?
  4. 推荐几个复刻真实产品的开源项目!学起来!
  5. 2021 年 5 月中国编程语言排行榜,C++ 超过 Java 没戏了...
  6. 微信8.0.6正式发布,新增了7大变化,个个实用~
  7. 皮一皮:如何识别对方回复话术的真实目的?
  8. 知乎高赞:字节总监的开发手记!
  9. Nacos配置中心原理
  10. 我说分布式事务之最大努力通知型事务