代码转换!将自己的123_GB18030.xml转换为UTF-8文件
来源:互联网 发布:中国男人非洲女人 知乎 编辑:程序博客网 时间:2024/05/16 10:11
转换之前需要做一些工作,首先是要将libxml2的源码包和libiconv的源码包解压到电脑上,没有的同学可以到网站上下载,刚刚上传了上去。找不到的同学可以到官网上下载最新的源码包
http://www.gnu.org/software/libiconv/
http://www.xmlsoft.org/
具体安装步骤:
1、解压:$tar zxvf libxml2-2.6.20.tar.gz
2、进入解压后的安装目录:$cd libxml2-2.6.20
3、安装三部曲:1)$./configure
2)$make
3)$make install
libiconv源码包的步骤同上。
下面进行代码的转换
首先我们要建立一个动态库,方便我们的转换
先进入vi编译器
vi iconv.c
#include<iconv.h>
#include <stdio.h>
#include<iconv.h>
#include <stdio.h>
int utf8togb18030(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
iconv_t cd;
if( (cd = iconv_open("gb18030","utf-8")) ==0 )
return -1;
memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
iconv_close(cd);
return 0;
}
int gb18030toutf8(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
iconv_t cd;
if( (cd = iconv_open("utf-8","gb18030")) ==0 )
return -1;
memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
iconv_close(cd);
return 0;
}
保存退出
root@:~/czy/test/test# gcc -shared -fpic -o libmy.so iconv.c
root@:~/czy/test/test这一行是我测试的地方
真正生成动态库的命令是gcc -shared -fpic -o libmy.so iconv.c
-fpic 使输出的对象模块是按照可重定位地址方式生成的。
-shared指定把对应的源文件生成对应的动态链接库文件。
动态库建成,此时就要进行我们的代码转换了。
vi main.c
#include <stdio.h>
#include <assert.h>//设定插入点
#include <ctype.h>//字符处理
#include <errno.h>//定义错误码
#include <float.h>//浮点数处理
#include <limits.h>//定义各种数据类型最值常量
#include <locale.h>//定义本地化函数
#include <math.h>//定义数学函数
#include <stdio.h>//定义输入/输出函数
#include <stdlib.h>//定义杂项函数及内存分配函数
#include <string.h>//字符串处理
#include <time.h>//定义关于时间的函数
#include <wchar.h>//宽字符处理及输入/输出
#include <wctype.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int main(int argc, char* argv[])
{
char line[1024*512];
char dest_gb18030[1024*512];
char dest_utf8[1024*512];
int ret ;
FILE *fp = fopen("/root/czy/test/test/123_GB18030.xml","r"); //fopen函数指定打开自己要转换的文件
if(fp == NULL)
{
printf("oh my dear,open fail...\n");
return 1;
}
memset(line,0,sizeof(line));
if( NULL == fread(line,1,sizeof(line)-1,fp))
{
printf("oh fread fail...\n");
return 2;
}
printf( "----- :%s\n",line );
ret = gb18030toutf8(line,strlen(line),dest_gb18030,1024*512);
printf( "ret=%d\n\n\n",ret);
printf( "gb18030:%s\n",line );
printf( " utf-8:%s\n\n\n\n\n\n", dest_gb18030 );
ret = utf8togb18030(dest_gb18030,strlen(dest_gb18030),dest_utf8,1024*512);
printf( "ret=%d\n\n\n ",ret);
printf( " utf-8:%s\n ",dest_gb18030);
printf( "gb18030:%s\n ",dest_utf8);
}
这里我将常见的头文件全部列出,方便大家学习。
root@:~/czy/test/test# gcc -I/root/czy/test/libxml/libxml2-2.9.0/include -o t main.c -L./ -lmy -lxml2 -L/root/czy/test/libxml/libiconv-1.14/lib/.libs -liconv
-I/root/czy/test/libxml/libxml2-2.9.0/include这一行是我解压的libxml源码位置,-I表示在include下搜索目录,-L表示在库中搜索目录。
此时我们回车后没有错误,但当我们./t 时就提示了错误
这是因为我们没有设置好环境变量
root@:~/czy/test/test# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
设置一下当前的环境变量
在./t 我们就回得到我们想要的结果了
- 代码转换!将自己的123_GB18030.xml转换为UTF-8文件
- Source Insight 将UTF-8格式的JAVA文件转换为GB2312格式的JAVA文件
- Source Insight 将UTF-8格式的JAVA文件转换为GB2312格式的JAVA文件
- 将以前的老代码,批量转换为UTF-8编码(可指定)
- UTFCastExpress 可将GBK编码的代码转换为UTF-8
- C++中,将.txt文件的编码由UTF-8转换为ANSI
- C++中,将.txt文件的编码由UTF-8转换为ANSI
- 将utf-8转换为unicode
- 将字符串转换为UTF-8编码
- 将字符串的编码格式转换为utf-8
- 将jbk格式的文件转换成utf-8的
- 将xml文件转换为DataSet
- 将xml文件转换为DataSet
- 将Xml 文件转换为 视图
- 将固定文件夹文件转换为XML
- 将xml转换为xlst文件
- 转载:将表/查询转换为标准的xml文件
- ASP中将汉字转换为UTF-8的一段代码
- 技术团队管理
- Oracle 定时任务时间写法
- .Net开发相关的一些学习相关
- Rotate List
- STM32串口通信中遇到有规律的乱码
- 代码转换!将自己的123_GB18030.xml转换为UTF-8文件
- The End-of-Line Story
- Oracle解锁
- SharePoint 2010 Server Error: The URL "XXX" is invalid, it may refer to a nonexistent file or ...
- hdu3466(01背包)
- python多线程并发执行程序实战讲解
- typeof
- 每日一题(50) - 绝对值最大的子序列和以及其区间
- libtool: link: `ext/standard/info.lo' is not a valid libtool object