mysql实现gb18030转utf8_将编码是GB18030的小文件转为UTF8
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相关推荐
- python3 gb2312转utf8_字符编码和python使用encode,decode转换utf-8, gbk, gb2312
python3 爬取网页报错:'gb2312' codec can't decode byte 0xb5 in position 154969: illegal multibyte sequence ...
- c++ uint32转为int_【转】用python将GBK编码文件转为UTF-8编码文件
学习资料: 字符集与字符编码 - 网易云课堂study.163.com 有的时候我们有一些网页的项目,需要用到JavaScript读取一些文本文件,用以读取数据:但各种文本文件的编码方式不尽相同,特 ...
- 用python将GBK编码文件转为UTF-8编码文件
有的时候我们有一些网页的项目,需要用到JavaScript读取一些文本文件,用以读取数据:但各种文本文件的编码方式不尽相同,特别是带有中文字符的文件,为GBK编码,一般加载后都会出现乱码情况,故需要在 ...
- 将unicode编码的txt文件转为utf-8编码
利用codes编写: # coding=UTF-8import stringimport codecsdef changecode(): tt=codecs.open('c:\\111.txt','r ...
- java 上传文件编码_(java)有什么办法把MultipartFile上传的文件转为utf-8的编码吗
[Java] 纯文本查看 复制代码import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc ...
- java文件全是数字编码_批量将Java源代码文件的编码从GBK转为UTF-8
最近在做一个项目,需要从以前的另外一个项目迁移大量源代码过来,但是由于另一个项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息都出现 ...
- mysql数据库latin1转utf8_三种转换Mysql数据库数据编码的窍门-latin1转utf8
背景:某个操作系统的Mysql数据库数据库Databnsednname采用默认的latin1字符集,操作系统升级需求将所有数据转换成utf-8各式,目的数据库Databnse为newdbname(建库 ...
- 怎么设置php.ini允许sql语句插入空值到mysql里_php读取.sql文件,写入mysql,navicat显示乱码,编码设置...
案例: php文件:install.php --------编码:php保存文件的编码.php header编码.php程序的默认编码.php写入数据库的编码 php读取的sql代码文件:php.sq ...
- mysql concat 不同字符集_字符编码 - 如何将整个MySQL数据库字符集和排序规则转换为UTF-8?...
字符编码 - 如何将整个MySQL数据库字符集和排序规则转换为UTF-8? 如何将整个MySQL数据库字符集转换为UTF-8并将整理转换为UTF-8? 17个解决方案 591 votes 使用utf8 ...
最新文章
- Docker虚拟化解析
- oracle 触发器 upsert,数据库管理员
- Js文件中调用其它Js函数的方法
- axios获取图片显示_vue中使用axios post上传头像/图片并实时显示到页面的方法
- 使用pm2启动Node和Vue项目教程
- javaweb学习中的路径问题
- 为Mac安装homebrew
- Java零基础入门 : (2) 代码编辑器IDEA安装与配置
- 关于 MySQL 8.0 新特性“隐藏索引”的一点思考
- android遍历图片,Android获取手机所有图片并显示
- Django打造大型企业官网-项目实战(二)
- 《纽约邮报》手机客户端推送系统被黑 黑客发送抒情诗
- oracle导入dmp报20000,imp导入dmp文件报:IMP-00038: 无法转换为环境字符集句柄IMP-00000: 未成功终止导入...
- 51单片机通过74HC595控制8位数码管,在任意位置显示数字
- 区块链金融的现状与展望
- Go语言(golang)的错误(error)处理的推荐方案
- ubuntu22.04运行qq音乐
- 下午茶,几个笑话提提神
- 第2章第6节:使用Slider滑杆在指定的范围内选择一个数值 [SwiftUI快速入门到实战]
- 中国研制成功人工智能探地雷达 可为地下空间做“体检”
热门文章
- oracle flashback table 参数,Oracle10g中FLASHBACK TABLE语句恢复DML误操作
- python开发需要掌握的知识_(深度学习)Python必须掌握基础知识,python,必会,知识点...
- Java 18 都要来了,你不会还在用Java 8吧?
- 推荐几个复刻真实产品的开源项目!学起来!
- 2021 年 5 月中国编程语言排行榜,C++ 超过 Java 没戏了...
- 微信8.0.6正式发布,新增了7大变化,个个实用~
- 皮一皮:如何识别对方回复话术的真实目的?
- 知乎高赞:字节总监的开发手记!
- Nacos配置中心原理
- 我说分布式事务之最大努力通知型事务