- 浏览: 4729855 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bzhao:
你也应该可以这样:(not tested)./rbtunnel ...
在Bash脚本中怎么关闭文件描述符? -
bzhao:
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则 ...
在Bash脚本中怎么关闭文件描述符? -
Master-Gao:
楼主咋没分析下源码呢?
我使用过的Linux命令之dirname - 截取给定路径的目录部分 -
jiedushi:
tail -F 就可以吧
Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能 -
java_is_new:
新手学习了,就是不明白为一个网卡配多个ip有什么用
我使用过的Linux命令之ifconfig - 网络配置命令
我使用过的Linux命令之iconv - 字符编码转换工具
本文链接:http://codingstandards.iteye.com/blog/807077 (转载请注明出处)
用途说明
iconv命令是用来转换文件的编码方式的(Convert encoding of given files from one encoding to another),比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用得着。
常用参数
首先,我们要知道支持的字符编码有哪些,这个可以用-l参数得到(List known coded character sets)。
格式:iconv -l
其次,是怎样转换,如下所示:
格式:iconv -f from-encoding -t to-encoding inputfile
上面的调用方式,会把输出打印在屏幕上,如果要输出到文件,可以像下面这样
格式:iconv -f from-encoding -t to-encoding inputfile -o outputfile
使用示例
示例一 列出支持的字符编码
[root@new55 ~]# iconv -l
The following list contain all the coded character sets known. This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters. One coded character set can be
listed with several different 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
<!doctype html><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(new Date).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(){delete g[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><div id=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":"\u003Cfont color=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 html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="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" />
中间省略掉输出了。
<div class="blog_main">
<div class="blog_title">
<div class="date"><span class='year'>2010</span><span class='sep_year'>-</span><span class='month'>10</span><span class='sep_month'>-</span><span class='day'>17</span></div>
<div class="show_full_flag"><a href='?show_full=true'>全文显示</a></div>
<h3><a href='/blog/786653'>[置顶] 我使用过的Linux命令系列总目录</a></h3>
<strong>文章分类:<a href="http://www.iteye.com/blogs/category/os" style="text-decoration:none;padding-right:10px;">操作系统</a></strong>
</div>
<div class="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 68 74 6d |...<!DOCTYPE htm|
00000010 6c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 |l PUBLIC "-//W3C|
00000020 2f 2f 44 54 44 20 58 48 54 4d 4c 20 31 2e 30 20 |//DTD XHTML 1.0 |
00000030 53 74 72 69 63 74 2f 2f 45 4e 22 20 22 68 74 74 |Strict//EN" "htt|
00000040 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 54 |p://www.w3.org/T|
00000050 52 2f 78 68 74 6d 6c 31 2f 44 54 44 2f 78 68 74 |R/xhtml1/DTD/xht|
00000060 6d 6c 31 2d 73 74 72 69 63 74 2e 64 74 64 22 3e |ml1-strict.dtd">|
00000070 0d 0a 3c 68 74 6d 6c 20 78 6d 6c 6e 73 3d 22 68 |..<html xmlns="h|
:q
那就把前面三个字节去掉试试,果然可以了。
[root@new55 ~]# curl -s http://www.dreamdu.com/ | cut -b 4- | iconv -futf8 -t gbk
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
ml xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
ead>
meta http-equiv="content-type" content="text/html; charset=utf-8" />
meta http-equiv="content-language" content="zh-CN" />
link rel="stylesheet" type="text/css" href="/style.css?v=1" media="screen" />
script type="text/javascript" src="/js.js"></script>
title>梦之都 - 网站设计与开发教程</title>
head>
ody>
中间省略掉输出。
body>
tml>
发现问题没有,每行的前面几个字符都消失了!!!
[root@new55 ~]#
问题思考
1. 中文字符集GB2312,GBK,GB18030等的区别?
2. BOM格式的问题?
3. 在Linux下怎么截取二进制文件的部分数据?
相关资料
【1】木鱼的说 探索UTF-8 BOM(UTF8签名)
发表评论
-
在Linux用tar归档压缩文件时忽略某些文件和目录
2013-02-01 10:19 16913在Linux下,常用tar对文 ... -
使用nmap扫描服务器端口的一次操作
2012-11-01 17:00 15069使用nmap扫描服务器端口的一次操作 本文来自:http ... -
我使用过的Linux命令之wget - ooo
2011-09-14 13:10 0我使用过的Linux命令之wg ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:53 9078简明 Vim 练级攻略 http://coolshell.c ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:49 1简明 Vim 练级攻略 http://coolshell.c ... -
我使用过的Linux命令之:(冒号) - 啥也不做(除了……)
2011-08-29 13:18 11967我使用过的Linux命令之: ... -
我使用过的Linux命令之date - 显示、修改系统日期时间
2011-08-25 09:21 41895我使用过的Linux命令之da ... -
我使用过的Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令)
2011-08-16 09:22 21731我使用过的Linux命令之declare - 声明shell变 ... -
我使用过的Linux命令之alias - 设置命令的别名,让 Linux 命令更简练
2011-08-11 09:31 28698我使用过的Linux命令之alias - 设置命令的别名,让 ... -
我使用过的Linux命令之ar - 创建静态库.a文件
2011-08-08 10:40 51801我使用过的Linux命令之ar - 创建静态库.a文件 本 ... -
我使用过的Linux命令之crontab - 设置例行任务(类似于Windows中的任务计划)
2011-08-04 22:26 9686我使用过的Linux命令之crontab - 设置例行任务(类 ... -
我使用过的Linux命令之chmod - 改变文件/目录的访问权限
2011-08-03 21:33 10634我使用过的Linux命令之chmod - 改变文件/目录的访问 ... -
我使用过的Linux命令之export - 设置或显示环境变量
2011-08-02 19:55 25356我使用过的Linux命令之export - 设置或显示环境变量 ... -
我使用过的Linux命令之wc - 统计文件行数、单词数或字节数
2011-07-26 10:50 28918我使用过的Linux命令之wc - 统计文件行数、单词数或字节 ... -
我使用过的Linux命令之groupdel - 删除群组
2011-07-22 22:13 9611我使用过的Linux命令之gr ... -
我使用过的Linux命令之ifconfig - 网络配置命令
2011-07-21 20:43 60356我使用过的Linux命令之ifconfig - 网络配置命令 ... -
我使用过的Linux命令之ll - 列出文件/目录的详细信息
2011-07-20 21:22 7093我使用过的Linux命令之ll ... -
我使用过的Linux命令之mkdir - 创建目录
2011-07-20 20:58 13599我使用过的Linux命令之mkdir - 创建目录 本文链 ... -
我使用过的Linux命令之perror - 解释错误代码
2011-07-18 20:29 24947我使用过的Linux命令之perror - 解释错误代码 ... -
我使用过的Linux命令之ping - 测试与目标主机的连通性
2011-07-16 10:46 26202我使用过的Linux命令之ping - 测试与目标主机的连通性 ...
相关推荐
iconv-lite - 纯javascript转换字符编码
apr-iconv-1.2.1.tar.gzapr-iconv-1.2.1.tar.gz
iconv 可以转换大文件编码转换,不产生乱码。里面有个简单的转码教程,更多功能需要自己挖掘
win_iconv - 编码转换工具,下载后解压,复制iconv.exe到C:\Windows\System32,即可使用。
iconv 转换字符 编码转换 utf8 gbk unicode
iconv-lite:纯JS字符编码转换无需本机代码编译。 快速安装,可在Windows和类的沙盒环境中使用。 用于诸如 , , , 等流行项目。 比更快(有关性能比较,请参见下文)。 直观的编码/解码API,包括流支持。 通过在...
iconv-lite 给TS和egret的 browserify var buf = iconv_lite.encode("Sample input string", 'win1251'); var str=iconv_lite.decode(buf, 'win1251');
perl-Text-Iconv-1.7-2.el5.i386
iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt > utf-8.txt。其中 -f gbk 指明转换前的文件编码是gbk,-t utf-8 指明...
要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。...
Linux下格式编码转换命令ICONV详解, 附带比较完整的支持编码字符集
perl-Text-Iconv-1.7-1.el5.rf.i386.rpm
使icon.lib实现编码转换
windows64位,visual2017,配合Cmake使用,需要的可以下载使用。dcmtk有多种工具集合,包括实现jpeg2000压缩dcm文件。windows的支持库
windows版 具体用法: -f From CodePage 源编码 -t To Codepage 目标编码 -s SubDirectory 递归检索子目录 -v Verbose 显示转化日志 eg: iconv *.txt -p .\ -f gb2312 -t utf-8 -v -s
apr-iconv linux 编译成功 apr-iconv linux 编译成功 apr-iconv linux 编译成功 apr-iconv linux 编译成功 apr-iconv linux 编译成功
编码是的简单包装,可以将字符串从一种编码转换为另一种编码。 最初,编码是围绕node-iconv (主要)和iconv-lite (后备)的包装,并用作Nodemailer / mailparser的编码层。 不知何故,它最终也成为了其他项目的...
perl-Text-Iconv-1.2-fc1.i386.rpm
perl-Text,perl-Text-Iconv-1.4-1.2.el5.rf.i386
apr-iconv-1.2.1-win32-src.zip这是ActiveMQ中间件开发需要用的库