Linux iconv --字符编码转换工具
来源:互联网 发布:淘宝篮球鞋进货渠道 编辑:程序博客网 时间:2024/05/18 23:25
用途说明
iconv命令是用来转换文件的编码方式的(Convertencoding of given files from one encoding to another),比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。 Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用得着。
常用参数
首先,我们要知道支持的字符编码有哪些,这个可以用-l参数得到(Listknown coded character sets)。
格式:iconv -l
其次,是怎样转换,如下所示:
格式:iconv -ffrom-encoding -t to-encoding inputfile
上面的调用方式,会把输出打印在屏幕上,如果要输出到文件,可以像下面这样
格式:iconv -ffrom-encoding -t to-encoding inputfile -o outputfile
使用示例
示例一 列出支持的字符编码
[root@new55 ~]# iconv -l
The following listcontain all the coded character sets known. This does
not necessarily meanthat all combinations of these names can be used for
the FROM and TOcommand line parameters. One coded character set can be
listed with severaldifferent names (aliases).
437, 500,500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,
866, 866NAV,869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4,
8859_5,8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4,
ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110,
ARABIC,ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5,
BIG-FIVE,BIG5-HKSCS, BIG5, BIG5HKSCS, BIGFIVE, BS_4730, CA, CN-BIG5, CN-GB,
中间省略掉输出了。
EUCJP-OPEN,EUCJP-WIN, EUCJP, EUCKR, EUCTW, FI, FR, GB, GB2312, GB13000,
GB18030, GBK,GB_1988-80, GB_198880, GEORGIAN-ACADEMY, GEORGIAN-PS,
GOST_19768-74, GOST_19768, GOST_1976874, GREEK-CCITT, GREEK, GREEK7-OLD,
GREEK7,GREEK7OLD, GREEK8, GREEKCCITT, HEBREW, HP-ROMAN8, HPROMAN8, HU,
中间省略掉输出了。
TIS620.2529-1, TIS620.2533-0, TIS620, TS-5881, TSCII, UCS-2, UCS-2BE,
UCS-2LE,UCS-4, UCS-4BE, UCS-4LE, UCS2, UCS4, UHC, UJIS, UK, UNICODE,
UNICODEBIG,UNICODELITTLE, US-ASCII, US, UTF-7, UTF-8, UTF-16, UTF-16BE,
UTF-16LE,UTF-32, UTF-32BE, UTF-32LE, UTF7, UTF8, UTF16, UTF16BE, UTF16LE,
UTF32,UTF32BE, UTF32LE, VISCII, WCHAR_T, WIN-SAMI-2, WINBALTRIM,
WINDOWS-31J,WINDOWS-874, WINDOWS-936, WINDOWS-1250, WINDOWS-1251,
WINDOWS-1252,WINDOWS-1253, WINDOWS-1254, WINDOWS-1255, WINDOWS-1256,
WINDOWS-1257,WINDOWS-1258, WINSAMI2, WS2, YU
太多了,我只想知道支持哪些中文格式的。
[root@new55 ~]# iconv -l | grep GB
CN-GB//
CSGB2312//
CSISO58GB1988//
EBCDIC-CP-GB//
GB//
GB2312//
GB13000//
GB18030//
GBK//
GB_1988-80//
GB_198880//
ISO646-GB//
有没有发现奇怪的地方,每行显示一个,并且后面加了两个斜杠。
[root@new55 ~]#
示例二 将Google香港的Big5编码转换成GBK编码
[root@new55 ~]# curl -s http://www.google.com.hk/| iconv -f big5 -t gbk
<!doctypehtml><html><head><meta http-equiv="content-type"content="text/html;charset=Big5"><title>Google</title><script>window.google={kEI:"tFXZTNHKDcGTkAXpvOHhCA",kEXPI:"26637,27404",kCSI:{e:"26637,27404",ei:"tFXZTNHKDcGTkAXpvOHhCA",expi:"26637,27404"},ml:function(){},kHL:"zh-TW",time:function(){return(newDate).getTime()},log:function(b,d,c){var a=new Image,e=google,g=e.lc,f=e.li;a.onerror=(a.onload=(a.onabort=function(){deleteg[f]}));g[f]=a;c=c||"/gen_204?atyp=i&ct="+b+"&cad="+d+"&zx="+google.time();a.src=c;e.li=f+1},lc:[],li:0,Toolbelt:{}};
id=ghead><divid=gbar><nobr><b class=gb1>所有網頁</b> <a onclick=gbar.qs(this)href="http://www.google.com.hk/imghp?hl=zh-tw&tab=wi"class=gb1>圖片</a> <a onclick=gbar.qs(this)href="http://video.google.com.hk/?hl=zh-tw&tab=wv" class=gb1>影片</a><a onclick=gbar.qs(this)href="http://maps.google.com.hk/maps?hl=zh-tw&tab=wl"class=gb1>地圖</a> <a onclick=gbar.qs(this)f||document.f||document.gs;google.ac.i(form,form.q,'','','',{o:1,sw:1});google.mc= [[14,{}],[64,{}],[105,{}],[22,{"m_error":"\u003Cfontcolor=red\u003E錯誤:\u003C/font\u003E伺服器無法完成您的要求。 請在 30秒後再試一次。","m_tip":"按一下以取得詳細資訊。"}],[84,{}]];google.med('init');google.History&&google.History.initialize('/')});if(google.j&&google.j.en&&google.j.xi){window.setTimeout(google.j.xi,0);google.fade=null;}</script></div><script>(function(){
中间省略掉输出了。
})();
</script>[root@new55~]#
示例三 将我的JavaEye博客首页从UTF8转换成GBK
[root@new55 ~]# curl -s http://codingstandards.iteye.com/ | iconv -f utf8 -t gbk
<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN"dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>Bash @ Linux - JavaEye技术网站</title>
<meta name="description" content="" />
<meta name="keywords" content="codingstandards Bash @Linux" />
中间省略掉输出了。
<divclass="blog_main">
<divclass="blog_title">
<divclass="date"><span class='year'>2010</span><spanclass='sep_year'>-</span><spanclass='month'>10</span><spanclass='sep_month'>-</span><spanclass='day'>17</span></div>
<divclass="show_full_flag"><a href='?show_full=true'>全文显示</a></div>
<h3><ahref='/blog/786653'>[置顶]我使用过的Linux命令系列总目录</a></h3>
<strong>文章分类:<ahref="http://www.iteye.com/blogs/category/os"style="text-decoration:none;padding-right:10px;">操作系统</a></strong>
</div>
<divclass="blog_content">
我使用过的Linux命令系列总目录
本文链接: http://codingstandards.iteye.com/blog/786653
iconv:未知3345处的非法输入序列
最后一行表明有错,改用下面的就会成功了。
[root@new55 ~]# curl -s http://codingstandards.iteye.com/ | iconv -f utf8 -t gb18030
此处省略输出。有兴趣的读者可以试一下,可以完整的显示整个页面的源代码。因为gbk是gb18030的子集,gb18030包含更多的字符。
[root@new55 ~]#
示例四 将梦之都的UTF8转换成GBK
[root@new55 ~]# curl -s http://www.dreamdu.com/| iconv -futf8 -t gbk
iconv: 未知 0 处的非法输入序列
有问题,用hexdump来看一下里面的字节,发现里面有ef bb bf的BOM信息,iconv不支持。
[root@new55 ~]# curl -s http://www.dreamdu.com/| hexdump -C | less
00000000 ef bb bf 3c 21 44 4f 43 54 59 50 45 20 6874 6d |...<!DOCTYPE htm|
00000010 6c 2050 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 |l PUBLIC "-//W3C|
00000020 2f 2f44 54 44 20 58 48 54 4d 4c 20 31 2e 30 20 |//DTD XHTML 1.0 |
00000030 53 7472 69 63 74 2f 2f 45 4e 22 20 22 68 74 74 |Strict//EN""htt|
00000040 70 3a2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 54 |p://www.w3.org/T|
00000050 52 2f78 68 74 6d 6c 31 2f 44 54 44 2f 78 68 74 |R/xhtml1/DTD/xht|
00000060 6d 6c31 2d 73 74 72 69 63 74 2e 64 74 64 22 3e |ml1-strict.dtd">|
00000070 0d 0a3c 68 74 6d 6c 20 78 6d 6c 6e 73 3d 22 68 |..<htmlxmlns="h|
:q
那就把前面三个字节去掉试试,果然可以了。
[root@new55 ~]# curl -s http://www.dreamdu.com/| cut -b 4- | iconv -futf8 -t gbk
<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
mlxmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN"dir="ltr">
ead>
metahttp-equiv="content-type" content="text/html;charset=utf-8" />
metahttp-equiv="content-language" content="zh-CN" />
linkrel="stylesheet" type="text/css"href="/style.css?v=1" media="screen" />
scripttype="text/javascript" src="/js.js"></script>
title>梦之都 -网站设计与开发教程</title>
head>
ody>
中间省略掉输出。
body>
tml>
发现问题没有,每行的前面几个字符都消失了!!!
[root@new55 ~]#
- Linux iconv --字符编码转换工具
- Linux 命令iconv -字符编码转换工具
- linux中字符编码转换工具iconv
- Linux下字符编码转换 -- iconv命令
- linux c 字符编码转换函数 iconv
- linux iconv字符编码批处理方式转换
- 我使用过的Linux命令之iconv - 字符编码转换工具
- 我使用过的Linux命令之iconv - 字符编码转换工具
- 我使用过的Linux命令之iconv - 字符编码转换工具
- 我使用过的Linux命令之iconv - 字符编码转换工具
- iconv 函数字符编码转换
- 字符编码的转换iconv
- Linux下实用的文件编码转换命令工具iconv
- iconv 转换字符编码,兼容VC转换
- iconv Linux下编码转换
- linux 编码类型转换-iconv
- linux的字符转换 iconv
- iconv、mb_convert_encoding字符编码的转换
- 第一封博客--记录从技术支持转岗c#开发
- XTU1238:Segment Tree(线段树区间更新)
- [cocos2dx笔记016]cocos2dx 3.2 的UserDefault
- php将字符首字母大小写转换
- 曾经经历的面试题汇总(2)
- Linux iconv --字符编码转换工具
- json
- 内核同步机制
- Linux ldd -- 查看可执行文件所依赖的动态链接库
- NSString 和NSData 转换
- 查看、分析memcached使用状态
- leetcode181-Employees Earning More Than Their Managers
- oracle中varchar和varchar2区别
- Linux lsattr --显示档案隐藏属性