python3 gbk转utf8,pythongbk编码字符串转为UTF-8
Linux没有以上两个函数,所以需要使用函数mbstowcs和wcstombs。
Mbstowcs将多字节编码转换为宽字节编码。
Wcstombs将宽字节编码转换为多字节编码。
这两个功能在转换时会受到系统编码类型的影响,必须设置转换前后的编码类型。在setlocale函数中设置系统代码。
在linux下输入名称。
Locale -a显示了系统支持的编码类型。
andy@andy-linux:~$ locale -a
C
en_ag
en_au.utf8
en_bw.utf8
en_ca.utf8
en_dk.utf8
en_gb.utf8
en_hk.utf8
en_ie.utf8
en_in
en_ng
en_nz.utf8
en_ph.utf8
en_sg.utf8
en_us.utf8
en_za.utf8
en_zw.utf8
可移植性操作系统接口
zh_cn.gb18030
zh_cn.gbk
zh_cn.utf8
zh_hk.utf8
zh_sg.utf8
zh_tw.utf8
本例实现了从zh_CN.gbk到zh_CN.utf8的转换。
流程:
1.调用函数setlocale(LC_all, zh_CN.gbk ),将要转码的字符串类型设置为gbk类型。
2.调用函数mbstowcs实现从1中的代码集到unicode代码的转换。
3.调用函数setlocale(LC_all, zh_CN.utf8),将转换后的编码类型设置为utf8类型。
4.调用函数wcstombs实现从unicode到3中设置的代码类型的转换。
以下是我写的源代码。
# include # include/* * * * * * * * * * * * * * * * * * include # include/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*功能:gbk2utf8
*描述:提供从gbk编码到utf8编码的转换。
*
* input: utfstr,转换后的字符串;Srcstr,要转换的字符串;Maxutfstrlen,大部分utfstr
大长度
*输出:utfstr
*返回:-1,失败;0,成功
*
*修改历史记录。
-
* 2011年11月25日,吕洪雅撰写
-
********************************。
intgbk2utf8(char*utfstr,const char *srcstr,int maxutfstrlen ) ) ) ) ) ) ) ) ) ) ) 65
{
if(null==srcstr)).
{
打印机(错误的参数(n));
返回-1;
}
//首先将gbk代码转换为unicode代码
If(null==setlocale(LC_all, zh _ cn . gbk )/setting是转换成unicode之前的代码,现在是gbk代码。
{
打印机(错误的参数(n));
返回-1;
}
intunicodelen=mbstowcs(null,srcstr,0);//计算转换后的长度
if(unicodelen=0)
{
打印(不能传输)!\ n ;
返回-1;
}
wchar _ t * unicode str=(wchar _ t *)calloc)sizeof(wchar _ t),unicode len 1);
mbstowcs(unicodestr、srcstr、strlen(srcstr));//gbk转换为unicode
将unicode编码转换为utf8编码
If(null==setlocale(LC_all, zh_cn.utf8 ))设置unicode转换后的代码,目前为utf8。
{
打印机(错误的参数(n));
返回-1;
}
intutflen=wcstombs(null,unicodestr,0);//计算转换后的长度
if(utflen=0)))
{
打印(不能传输)!\ n ;
返回-1;
}
Elseif(utflen=maxutfstrlen )//确定是否有足够的空间。
{
print(dststrmemorynotenough(n));
返回-1;
}
wstombs(utfstr,unicodestr,ut flen);
utf str[ut flen]=0;//添加一个终止符
Free (unicode字符串);
返回utflen
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。