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

posix

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 /******************************************************************************

* function: gbk2utf8

* description: 实现由gbk编码到utf8编码的转换

*

* input: utfstr,转换后的字符串; srcstr,待转换的字符串; maxutfstrlen, utfstr的最

大长度

* output: utfstr

* returns: -1,fail;>0,success

*

* modification history

* --------------------

* 2011-nov-25, lvhongya written

* --------------------

******************************************************************************/

int gbk2utf8(char *utfstr,const char *srcstr,int maxutfstrlen)

{

if(null==srcstr)

{

printf("bad parameter\n");

return -1;

}

//首先先将gbk编码转换为unicode编码

if(null==setlocale(lc_all,"zh_cn.gbk"))//设置转换为unicode前的码,当前为gbk编码

{

printf("bad parameter\n");

return -1;

}

int unicodelen=mbstowcs(null,srcstr,0);//计算转换后的长度

if(unicodelen<=0)

{

printf("can not transfer!!!\n");

return -1;

}

wchar_t *unicodestr=(wchar_t *)calloc(sizeof(wchar_t),unicodelen+1);

mbstowcs(unicodestr,srcstr,strlen(srcstr));//将gbk转换为unicode

//将unicode编码转换为utf8编码

if(null==setlocale(lc_all,"zh_cn.utf8"))//设置unicode转换后的码,当前为utf8

{

printf("bad parameter\n");

return -1;

}

int utflen=wcstombs(null,unicodestr,0);//计算转换后的长度

if(utflen<=0)

{

printf("can not transfer!!!\n");

return -1;

}

else if(utflen>=maxutfstrlen)//判断空间是否足够

{

printf("dst str memory not enough\n");

return -1;

}

wcstombs(utfstr,unicodestr,utflen);

utfstr[utflen]=0;//添加结束符

free(unicodestr);

return utflen;

linux c++ utf8 gbk,Linux C++ gbk转为utf-8相关推荐

  1. linux unicode utf8.h,linux shell下16进制 “\uxxxx” unicode to UTF-8中文

    问题出现背景: 项目中有个通过ip获取归属地城市需求,我是直接通过新浪的ip归属查询接口来获取的.我使用的是shell脚本调用 RESULT=$(curl -s 'http://int.dpool.s ...

  2. java sql编码_java+sql 编码 UTF-8、ISO-8859-1、GBK

    java 编码 UTF-8.ISO-8859-1.GBK Java支持UTF-8.ISO-8859-1.GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于 ...

  3. linux笔记本没有insert,无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)...

    无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux) 当创建表时,我已经设置了charset = utf8. ...

  4. linux的xml文件格式,linux – 如何将非UTF-8格式的xml文件转换为符合UTF-8的xml

    我有一个巨大的xml文件,其示例数据如下: 因为可以看到有文字"GesellschaftfürBildverarbeitung",它不符合UTF-8,因为我从xml验证器得到错误 ...

  5. UTF8和UNICODE和GBK编码

    UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较: 以"I am Chinese"为例 ...

  6. crt登录linux显示中文乱码,linux secureCRT 显示中文乱码

    安装的时候,只安装了英文,没有安装中文,所以只有en_US.UTF-8.因为linux本身就支持多语言,所以我们只需要在光盘 上找到2个中文支持字体包安装上即可.这两个字体文件是存放在第四张光盘上的S ...

  7. linux centos 的编码格式,Linux/CentOS/fedora下vim显示的字符编码设置

    和所有的流行文本编辑器一样,vim可以很好的编辑各种字符编码的文件,这当然包括ucs-2.utf-8 等流行的 unicode 编码方式.然而不幸的是,和很多来自 linux 世界的软件一样,这需要你 ...

  8. linux nginx安装php5.5,linux下搭建LNMP(linux+nginx+mysql+php)环境之mysql5.5安装

    linux下搭建LNMP(linux+nginx+mysql+php)环境之mysql5.5安装: 首先安装依赖包: yum -y install gcc gcc-c++ autoconf libjp ...

  9. linux 编辑文件乱码,Linux中vi编辑器显示中文乱码的问题

    方法: 由于在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码.修改了一下配置文件,使vi支持gb编码就好了. $vi~/.vimrc l ...

  10. linux 设置中文命令,Linux下使用locale命令设置语言环境

    locale命令设置语言环境 在Linux中通过locale来设置程序运行的不同语言环境,locale由 ANSI C提供支持.locale的命名规则为_.,如zh_CN.GBK,zh代表中文, CN ...

最新文章

  1. Python 判断当前数值的类型(比如x=10 获取x的类型)
  2. CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)
  3. 后台开发经典书籍--深入理解计算机系统
  4. Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
  5. 九齐NY8B072A单片机使用笔记(一)TIMER0定时器
  6. Android 安全机制概述
  7. 1539. 第 k 个缺失的正整数
  8. KVM克隆CentOS6虚拟机后无法启动
  9. 著名风投Greylock扩展基金局限 投资科技行业
  10. C#设计模式(学习笔记[01])
  11. 概率论由相关性求数学期望和方差的公式_2020.3.30 | 考研数学—概率论与数理统计:各章节考试重点...
  12. python单引号双引号三引号_python中的单引号、双引号和三引号有何区别
  13. [转载] Python使用list.reverse()返回None
  14. NSObject的load和initialize方法(转)
  15. 一个服务调用另一个服务的步骤
  16. linux postgresql 创建数据库,第 23 课 PostgreSQL 创建自己的数据库、模式、用户
  17. 英语单词积累8.10
  18. 用JS控制flvplayer.swf播放视频
  19. Web服务器的配置与应用
  20. 你是我无法斑驳的阳光

热门文章

  1. 百度搜索关键词纠错机制研究
  2. spring 事务配置
  3. Thrift的安装和简单示例
  4. C# 窗口大小及屏幕分辨率操作
  5. CentOS下安装JDK完整步骤
  6. CentOS 7下sshd防暴力破解及fail2ban的使用方法
  7. linux下limits.conf 修改不生效的原因
  8. php环境Unknown column ‘*‘ in ‘field list‘解决方案
  9. 安装mysql数据库及问题解决方法
  10. 解决Python开发中,Pycharm中无法使用中文输入法问题