LibXML2自身已经支持了中文编码,只是他的所有api处理的数据都是UTF-8类型的,所以只要在读入和写入数据时进行相应装换即可!

代码1是使用Linux下C API进行编码转换;

代码2因为libxml2已经融合了iconv,使用了libxml2的函数来进行编码转换。

/*
compile: gcc -l/usr/include/libxml2 -lxml2 iconv.c
input:test.xml<?xml version="1.0" encoding="gb2312"?><parent>测试</parent>
output:测试
1) iconv
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <arpa/inet.h>
#include <iconv.h>char *Convert(char *encFrom, char *encTo, const char *in)
{static char bufin[1024], bufout[1024], *sin, *sout;int mode, lenin, lenout, ret, nline;iconv_t c_pt;if ((c_pt = iconv_open(encTo, encFrom)) == (iconv_t)-1) {printf("iconv_open false: %s ==> %s\n", encFrom, encTo);return NULL;}iconv(c_pt, NULL, NULL, NULL, NULL);lenin = strlen(in) + 1;lenout = 1024;sin = (char *)in;sout = bufout;ret = iconv(c_pt, &sin, (size_t *)&lenin, &sout, (size_t *)&lenout);if (ret == -1) {return NULL;}iconv_close(c_pt);return bufout;
}int main(void) {xmlDocPtr doc = NULL;xmlNodePtr cur = NULL;doc = xmlParseFile("test.xml");cur = xmlDocGetRootElement(doc);printf("%s\n", (char *)xmlNodeGetContent(cur));//printf(%s\n", Convert("utf-8", "gb2312", (char*)xmlNodeGetContent(cur)));
}

2) xmlFindCharEncodingHandler

使用数据类型: xmlCharEncodingHandlerPtr

/*******************************************
* compile: gcc -l/usr/include/libxml2/ -lxml2 convert.c
* usage: convert utf-8 string or null
* input: /convert 测试
* output:[wuqifu@localhost test]$ ./convert 测试ISO-8859-1: 虏芒脢脭
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>测试</root>
**************************************/#include <libxml/encoding.h>
/*** function name: ConvertInput* input:@in: string in a given encoding@encoding: the encoding used
* description: Converts @in into UTF-8 for processing with libxml2 APIs
* return: returns the converted UTF-8 string, or NULL in case of error.
**/
unsigned char *ConvertInput(const char *in, const char *encoding)
{unsigned char *out;int ret;int size;int out_size;int temp;xmlCharEncodingHandlerPtr handler;if (in == 0) return 0;handler = xmlFindCharEncodingHandler(encoding);if (!handler) {printf("ConvertInput: no encoding handler found for '%s'\n",encoding ? encoding : "");return 0;}size = (int) strlen(in) + 1;out_size = size * 2 - 1;out = (unsigned char *)xmlMalloc((size_t) out_size);if (out != 0) {temp = size - 1;ret = handler->input(out, &out_size, (const unsigned char *)in, &temp);if ((ret < 0) || (temp - size + 1)) {if (ret < 0) {printf("ConvertInput: conversion wasn't successful.\n");} else {printf("ConvertInput: conversion wasn't successful. converted: %i octets.\n", temp);}xmlFree(out);out = 0;} else {out = (unsigned char *)xmlRealloc(out, out_size + 1);out[out_size] = 0; /* null terminating out */}} else {printf("ConvertInput: no mem\n");}return out;
}int main(int argc, char **argv)
{unsigned char *content, *out;xmlDocPtr doc;xmlNodePtr rootnode;char *encoding = "ISO-8859-1"; //utf-8, ISO-8859-1if (argc <= 1) {printf("Usage: %s content\n", argv[0]);return (0);}content = argv[1];out = ConvertInput(content, encoding);printf("%s:%s\n", encoding, out);doc = xmlNewDoc("1.0");rootnode = xmlNewDocNode(doc, NULL, (const xmlChar*)"root", out);xmlDocSetRootElement(doc, rootnode);xmlSaveFormatFileEnc("=", doc, encoding, 1);return 1;
}

libxml2中文支持相关推荐

  1. matlab2018无法使用qcat,解决Matlab 2018a源代码的中文支持问题

    1. 问题 Matlab 2018a源代码的中文支持问题: Matlab软件要求源文件mfile采用GBK编码.但是在调用程序过程中,程序有时候必须用UTF-8编码,例如shaperead中文地图程序 ...

  2. JSON asp(vbs)中文支持问题

    JSON asp(vbs)中文支持问题 <% '************************************************************************* ...

  3. WINCE6.0 中文支持

    WINCE6.0 中文支持(转) 2009-07-28 09:42 在以前用PB做CE5.0的时候,选择中文很简单: 现在用CE6.0,其实也很简单 ,但是我今天居然忘了, 又花费了点时间去catal ...

  4. irrlicht1.3中文支持

    irrlicht1.3的中文支持补丁,需要的朋友可以下载,如何使用里面有说明./Files/flysnow/IrrlichtML-1.3-win32Linux.zip 转载于:https://www. ...

  5. centos6.2安装桌面环境 与中文支持

    yum groupinstall "X Window System" //安装Xorg yum groupinstall "Desktop" //安装GNOME ...

  6. Linux(CentOS)中常用软件安装,使用及异常——XManager, 中文支持,JDK

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  7. OpenReports中文支持方案

    此文章在<OpenReports中文支持完全解决方案.doc>的基础上做优化,并贴出代码.已测试通过. 一.主要解决的问题 1 页面显示支持中文 2 与服务器或数据库的交互支持中文 3 查 ...

  8. Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  9. linux mint php mysql_linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /e ...

最新文章

  1. 用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy
  2. STM8L探索套件学习笔记(转)
  3. 认真了解一下javascript
  4. .NET之模型绑定和验证
  5. Java ByteBuffer –速成课程
  6. stack java实现_java实现stack
  7. cocos2dx 交叉编译 iconv库 protobuf库
  8. 递归下降文法C语言实验报告,编译原理实验报告:实验二编写递归下降语法分析程序...
  9. 交通灯控制系统的设计
  10. 前端截图与贴图神器snipaste下载与常见问题(1)
  11. asset文件夹路径 unity_Unity资源常用目录和路径大总结
  12. ​杭州,苏州,成都哪个最宜居?
  13. 电脑开机加速,一下子就提升了20几秒
  14. c语言码流文件,视频文件大小的计算以及视频在网络上的传输(KB、kb、GB、kbps码率)...
  15. 循环卷积和线性卷积的关系
  16. 【demo记录】百度地图获取当前所在城市
  17. HBaseCon Asia 2019 Track 3 概要回顾
  18. c++调用sanp7和西门子通信demo
  19. 开发杂谈:后移动互联网时代我的一些思考
  20. 河北省谷歌地球高程DEM等高线下载

热门文章

  1. 【已解决】报错:cannot be resolved to a variable
  2. 单片机原理及其应用——单片机控制按键依次点亮8只发光二极管
  3. spring 扫描所有_从Spring的几个阶段理解其工作过程
  4. Eclipse安装AmaterasUML
  5. java中生成不重复随机的数字
  6. android7.1 shotcuts,Android N App Shotcuts 学习
  7. whois php,用PHP实现标准的IP Whois查询
  8. bim 模型web页面展示_BIM+装配式建筑工程师2020年必须拿下的技能证书
  9. python坐标怎么打_python导入坐标点的操作方法
  10. c语言代码表白_用微信表情翻译表白,程序员的小浪漫,赶紧Get起来