基础知识:
1、要明白libxml库下是以utf-8格式来保存xml文件的。
2、 需要明白在调试程序时,使用的终端其支持那种格式的编码,不同的终端支持的编码格式是不同的。(否则会出现乱码)。
一个linux下自带的编码转换函数:
iconv( ...................................................);
自写的转换函数:
/*
功能 : 编码转换函数
参数1 : 被转换的编码
参数2 : 转换的目标编码
返回值: 转换过后的目标编码字符串
*/
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, &in, (size_t *)&lenin, &sout, (size_t *)&lenout);
if (ret == -1)
{
return NULL;
}
iconv_close(c_pt);
return bufout;
}
我在调试程序时,理清楚的内容:
虚拟机ubuntu下的终端支持utf-8的编码格式;
在ultraedit中编写时使用的编码为gb2312
开发板的终端支持gb2312格式
而保存在xml文件中的格式为utf-8格式。
所以如果是在ubuntu下的终端调试程序时,你还将xml文件的utf-8格式的文件转换为gb2312的话,打印出来的就成乱码了。
如果 你在开发板上不将utf-8 格式的编码转换成gb2312格式的话,其也会成乱码。