linux c++ utf8 gbk,Linux C++ gbk转为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
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相关推荐
- linux unicode utf8.h,linux shell下16进制 “\uxxxx” unicode to UTF-8中文
问题出现背景: 项目中有个通过ip获取归属地城市需求,我是直接通过新浪的ip归属查询接口来获取的.我使用的是shell脚本调用 RESULT=$(curl -s 'http://int.dpool.s ...
- 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中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于 ...
- 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. ...
- linux的xml文件格式,linux – 如何将非UTF-8格式的xml文件转换为符合UTF-8的xml
我有一个巨大的xml文件,其示例数据如下: 因为可以看到有文字"GesellschaftfürBildverarbeitung",它不符合UTF-8,因为我从xml验证器得到错误 ...
- UTF8和UNICODE和GBK编码
UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较: 以"I am Chinese"为例 ...
- crt登录linux显示中文乱码,linux secureCRT 显示中文乱码
安装的时候,只安装了英文,没有安装中文,所以只有en_US.UTF-8.因为linux本身就支持多语言,所以我们只需要在光盘 上找到2个中文支持字体包安装上即可.这两个字体文件是存放在第四张光盘上的S ...
- linux centos 的编码格式,Linux/CentOS/fedora下vim显示的字符编码设置
和所有的流行文本编辑器一样,vim可以很好的编辑各种字符编码的文件,这当然包括ucs-2.utf-8 等流行的 unicode 编码方式.然而不幸的是,和很多来自 linux 世界的软件一样,这需要你 ...
- 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 ...
- linux 编辑文件乱码,Linux中vi编辑器显示中文乱码的问题
方法: 由于在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码.修改了一下配置文件,使vi支持gb编码就好了. $vi~/.vimrc l ...
- linux 设置中文命令,Linux下使用locale命令设置语言环境
locale命令设置语言环境 在Linux中通过locale来设置程序运行的不同语言环境,locale由 ANSI C提供支持.locale的命名规则为_.,如zh_CN.GBK,zh代表中文, CN ...
最新文章
- Python 判断当前数值的类型(比如x=10 获取x的类型)
- CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)
- 后台开发经典书籍--深入理解计算机系统
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
- 九齐NY8B072A单片机使用笔记(一)TIMER0定时器
- Android 安全机制概述
- 1539. 第 k 个缺失的正整数
- KVM克隆CentOS6虚拟机后无法启动
- 著名风投Greylock扩展基金局限 投资科技行业
- C#设计模式(学习笔记[01])
- 概率论由相关性求数学期望和方差的公式_2020.3.30 | 考研数学—概率论与数理统计:各章节考试重点...
- python单引号双引号三引号_python中的单引号、双引号和三引号有何区别
- [转载] Python使用list.reverse()返回None
- NSObject的load和initialize方法(转)
- 一个服务调用另一个服务的步骤
- linux postgresql 创建数据库,第 23 课 PostgreSQL 创建自己的数据库、模式、用户
- 英语单词积累8.10
- 用JS控制flvplayer.swf播放视频
- Web服务器的配置与应用
- 你是我无法斑驳的阳光
热门文章
- 百度搜索关键词纠错机制研究
- spring 事务配置
- Thrift的安装和简单示例
- C# 窗口大小及屏幕分辨率操作
- CentOS下安装JDK完整步骤
- CentOS 7下sshd防暴力破解及fail2ban的使用方法
- linux下limits.conf 修改不生效的原因
- php环境Unknown column ‘*‘ in ‘field list‘解决方案
- 安装mysql数据库及问题解决方法
- 解决Python开发中,Pycharm中无法使用中文输入法问题