libiconv_百度百科
libiconv_百度百科
由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码。
目录1libiconv历史简介
2libiconv编码简介
3libiconv使用举例
▪使用步骤
▪函数参数:1libiconv历史简介编辑
随着互联网时代的到来,通过互联网进行文字交流也逐渐增多:浏览外国的网站,这个时候字符编码的转换变得尤为重要。这带来了一个问题,就是许多字符在某一种编码方式中没有。为了解决这种混乱,Unicode的编码方式被建立。Unicode是一种超级编码包含了所有这些编码的字符集,因此一些新的文本格式像XML的默认编码方式就是Unicode.
但是很多老式的计算机还在使用当地的传统的字符编码方式。而一些程序,例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换。其他的一些程序则内置支持Unicode,以顺利支持国际化的处理,但是仍然有在Unicode和其他的传统编码之间转换的需求。GNU的libiconv就是为这两种应用设计的编码转换库。
2libiconv编码简介编辑
libiconv库[1]为需要做转换的应用提供了一个iconv()的函数,以实现一个字符编码到另一个字符编码的转换。
包括的编码有:
欧洲语系
ASCII,
ISO-8859-{1,2,3,4,5,7,9,10,13,14,15,16},
KOI8-R, KOI8-U, KOI8-RU,
CP{1250,1251,1252,1253,1254,1257},
CP{850,866},
Mac{Roman,CentralEurope,Iceland,Croatian,Romania},
Mac{Cyrillic,Ukraine,Greek,Turkish},
Macintosh
犹太语系 ISO-8859-{6,8}, CP{1255,1256}, CP862, Mac{Hebrew,Arabic}
日文 EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1
中文 EUC-CN, HZ, GBK, GB18030, EUC-TW, BIG5, CP950, BIG5-HKSCS, ISO-2022-CN, ISO-2022-CN-EXT
朝鲜文 EUC-KR, CP949, ISO-2022-KR, JOHAB
亚美尼亚语 ARMSCII-8
格鲁尼亚语 Georgian-Academy, Georgian-PS
塔吉克语 KOI8-T
泰国语 TIS-620, CP874, MacThai
老挝语 MuleLao-1, CP1133
越南语 VISCII, TCVN, CP1258
特殊平台 HP-ROMAN8, NEXTSTEP
全部Unicode
UTF-8, UTF-7
UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4BE, UCS-4LE
UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE
C99, JAVA
全部Unicode,在uint16_t或uint32_t方面(使用机器相关的字节序和对齐方式):
UCS-2-INTERNAL, UCS-4-INTERNAL
本地依赖,在'char'或'wchar_t'方面(使用机器相关的字节序和对齐方式,以及系统和区域相关的语义):
char, wchar_t
空的编码名""等同于"char",它表示与区域相关的字符编码
当使用了--enable-extra-encodings设置选项,将额外提供对少量编码的支持:
欧洲语系
CP{437,737,775,852,853,855,857,858,860,861,863,865,869,1125}
犹太语系
CP864
日语
EUC-JISX0213, Shift_JISX0213, ISO-2022-JP-3
土库曼语
TDS565
特殊平台
RISCOS-LATIN1
通过将Unicode作为 中间编码,所有编码之间都可以相互转换。
并且也在直译上提供了有限的支持。就是说,当一个字符在目标的编码里没有的对应字符的时候,转换程序会自动从一个或多个看起来相似的字符中选择一个。目标编码名前面加上“//TRANSLIT”即可使用直译功能。
libiconv在系统缺少多种多样的字符编码支持时,提供这样方面的支持,
3libiconv使用举例编辑
使用步骤(1)打开:iconv_t converter = iconv_open("gbk","utf-8");
(2)转换:size_t rc = iconv(converter, input, insize, output, outsize);
(3)关闭:iconv_close(converter);
函数参数:
(iconv_t cd, const char* * inbuf, size_t * inbytesleft, char* * outbuf, size_t * outbytesleft);
需要注意的是iconv 函数会修改指针*inbuf 和指针*outbuf的值(刚开始不知道,老是内存泄漏)(*inbytesleft,*outbytesleft也会被修改)。因此需要保存原输入、输出内存分配的地址值。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//要转换至的编码应与编译器使用的默认编码不同,相同的话将转换失败
//比如VC6.0中文默认使用UTF-8进行编码,iconv_open("gbk","UTF-8");将失败
#include <iostream>
#include <iconv.h>
using namespace std;
#pragma comment(lib,"iconv.lib")
int main()
{
iconv_t conveter = iconv_open("gbk","UTF-8");
if(conveter== iconv_t(-1)){
cout<<"encode convert not supported!"<<endl;
if(errno==EINVAL)cout<<"einval"<<endl;
return -1;
}
else{
cout<<"ok!"<<endl;
}
//待转换的字符串
size_t insize;
const char *input = "hello是";//汉字随便加//应是const char *而不是char *
//char *input_old = input; //记录待转换字符串的地址
//input_old is unused variable.
insize=strlen(input);
cout<<"input is: "<<input<<endl;
//存储转换结果的字符串
size_t outsize = insize * 3+1;
char *output = new char[outsize];
char *output_old = output;//记录转换后的字符串的地址
memset(output,0,outsize);
//转换
//size_t rc = iconv(conveter,(const char **)&input,&insize,&output_old,&outsize);
//参数要求char **不是const char **。可能存在版本问题。
size_t ret = iconv(converter,(char**)&input,&insize,&output_old,&outsize);
//if(rc==-1){
//size_t 是unsigned类型
if(ret==(size_t)-1)
cout<<"converting failed"<<endl;
return -1;
}
//输出转换后的字符串
//cout<<"outputis: "<<output_old;
//output_old已经被改变了。应使用output来输出结果。
cout<<"output is : "<<coutput;
cout<<" outsize="<<outsize<<endl;
//delete[] input_old;//内存释放,不需要释放它,常量字符串
//delete[] output_old; //内存释放
//应释放的位置不是output_old,理由同上。
delete[] output;
iconv_close(conveter);
}
转载于:https://www.cnblogs.com/lexus/p/3653729.html
libiconv_百度百科相关推荐
- 爬取百度百科上中国所有城市的信息
1 # coding=utf-8 2 import xlrd 3 import xlwt 4 import requests 5 import re 6 import json 7 import os ...
- 使用CURL构建爬虫,抓取百度百科内容
实现这个功能的步骤: 首先打开百度百科,在搜索框输入"php"关键词,得到搜索列表,一般都是10条: 然后使用火狐的Firebug分析百度列表的内容组成,主要是html标签,发现去 ...
- 姚殊清华计算机科学与技术,王道顺(清华大学计算机科学与技术系副教授)_百度百科...
王道顺 (清华大学计算机科学与技术系副教授) 语音 编辑 锁定 讨论 上传视频 王道顺,毕业于四川大学理学博士 (应用数学),现为 清华大学计算机科学与技术系副教授. 中文名 王道顺毕业院校 职 ...
- python编程中文版百度百科_1.2 搭建python+pycharm编程开发环境
工欲善其事必先利其器,很多小伙伴在学习编程的道路上,第一步就被编程环境搭建劝退.今天就让我们起来快速搭建一个python的开发环境,开启征服python的第一步. 一.Python安装 1.1pyth ...
- 【网络爬虫】BeautfulSoup爬百度百科(真の能看懂~!)
文章目录 1 百度百科 2 观看规律 3 制作爬虫 4 结果 1 百度百科 百度百科中有很多名词的解释信息, 我们今天从 "网页爬虫" 的词条开始爬, 然后在页面中任意寻找下一个词 ...
- python爬虫百度百科-如何入门 Python 爬虫?
目前网上有关网页爬虫的指导有很多,但是套路却是千篇一律,基本都是围绕以下内容进行展开,CSS/html等网页知识 requests或urllib BeautifulSoup或正则表达式 Seleniu ...
- python语言百度百科-Python 语言下数据驱动DDT的应用
数据驱动测试的含义: 在百度百科上的解释是: 数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把测试对象看作一个黑盒子.利用黑盒测试法进行动态测试时,需要测试软件产品 ...
- 用python 爬取百度百科内容-爬虫实战(一) 用Python爬取百度百科
最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...
- python爬虫百度百科-python爬虫(一)_爬虫原理和数据抓取
本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...
- python爬取百度百科词条-python简单爬虫爬取百度百科python词条网页
目标分析: 目标:百度百科python词条相关词条网页 - 标题和简介 入口页:https://baike.baidu.com/item/Python/407313 URL格式: - 词条页面URL: ...
最新文章
- Python的必学技术——Jupyter Notebook
- SUPPORTDIR引用的文件的加入
- silverlight 调用默认打印机
- C# winform中一个类中如何调用另一个窗体的控件或方法
- python3数字全排列怎么搞_python使用递归解决全排列数字示例
- 开发HTML5手机游戏的5个注意要点--手机开发前景-- 转
- linux oracle脚本编写,Linux 脚本编写基础(一)--语法
- 程序员的失业危机原因及应对方法汇总
- 推荐系统实战系列(python版).rar_python实战音乐推荐系统
- mysql 主从 锁库_mysql 5.7.21 主从集群恢复GTID方式(不锁库)
- java数组包含某个值_如何检查Java数组是否包含值?
- 行列转换的SQL语句
- python- panabit添加黑白名单
- 算24点的一般方法及例题
- 校园小说男主是计算机系,十大完本校园小说排行榜 经典好看的青春校园小说...
- (˙﹏˙) 开工~~~~~~
- 干货!ERP系统优化生产管理流程五大步骤
- 操作符( ˃᷄˶˶̫˶˂᷅ )
- 【OpenCv】图像模糊(均值模糊,高斯模糊,中值模糊,双边模糊)
- 认识网络机柜布线中跳线架和配线架的用途
热门文章
- window 2012 上安装 sql server 2005 出错的解决方案
- Oracle数据库常见版本
- 【foobar 2000】如何在手机、电脑上播放局域网内另一台电脑上存储的音乐?FTP服务器、UPnP/DLNA协议、构建Music server、创建音乐服务器
- 为什么计算机上面没有桌面,请问为什么右击电脑桌面上的图标没有打开的选项,只有添加到压缩文件,双击才能进去?...
- c语言 背包算法,c语言背包问题(背包最大容量c语言算法)
- 将类似 Fri Jun 14 2019 00:00:00 GMT+0800 (中国标准时间) 的日期转化为 XXXX-XX-XX的形式...
- windows配置pip加速器
- VMware解决黑屏
- BJUI-textarea标签内容高度自适应问题
- 计算机装系统常用单词,电脑bios中英文对照表大全,安装系统再也不怕英文了...