- 浏览: 4754381 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 17053在Linux下,常用tar对文 ... -
使用nmap扫描服务器端口的一次操作
2012-11-01 17:00 15139使用nmap扫描服务器端口的一次操作 本文来自:http ... -
我使用过的Linux命令之wget - ooo
2011-09-14 13:10 0我使用过的Linux命令之wg ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:53 9150简明 Vim 练级攻略 http://coolshell.c ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:49 1简明 Vim 练级攻略 http://coolshell.c ... -
我使用过的Linux命令之:(冒号) - 啥也不做(除了……)
2011-08-29 13:18 12101我使用过的Linux命令之: ... -
我使用过的Linux命令之date - 显示、修改系统日期时间
2011-08-25 09:21 41985我使用过的Linux命令之da ... -
我使用过的Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令)
2011-08-16 09:22 21831我使用过的Linux命令之declare - 声明shell变 ... -
我使用过的Linux命令之alias - 设置命令的别名,让 Linux 命令更简练
2011-08-11 09:31 28829我使用过的Linux命令之alias - 设置命令的别名,让 ... -
我使用过的Linux命令之ar - 创建静态库.a文件
2011-08-08 10:40 51934我使用过的Linux命令之ar - 创建静态库.a文件 本 ... -
我使用过的Linux命令之crontab - 设置例行任务(类似于Windows中的任务计划)
2011-08-04 22:26 9752我使用过的Linux命令之crontab - 设置例行任务(类 ... -
我使用过的Linux命令之chmod - 改变文件/目录的访问权限
2011-08-03 21:33 10706我使用过的Linux命令之chmod - 改变文件/目录的访问 ... -
我使用过的Linux命令之export - 设置或显示环境变量
2011-08-02 19:55 25441我使用过的Linux命令之export - 设置或显示环境变量 ... -
我使用过的Linux命令之wc - 统计文件行数、单词数或字节数
2011-07-26 10:50 29019我使用过的Linux命令之wc - 统计文件行数、单词数或字节 ... -
我使用过的Linux命令之groupdel - 删除群组
2011-07-22 22:13 9693我使用过的Linux命令之gr ... -
我使用过的Linux命令之ifconfig - 网络配置命令
2011-07-21 20:43 60555我使用过的Linux命令之ifconfig - 网络配置命令 ... -
我使用过的Linux命令之ll - 列出文件/目录的详细信息
2011-07-20 21:22 7209我使用过的Linux命令之ll ... -
我使用过的Linux命令之mkdir - 创建目录
2011-07-20 20:58 13686我使用过的Linux命令之mkdir - 创建目录 本文链 ... -
我使用过的Linux命令之perror - 解释错误代码
2011-07-18 20:29 25081我使用过的Linux命令之perror - 解释错误代码 ... -
我使用过的Linux命令之ping - 测试与目标主机的连通性
2011-07-16 10:46 26615我使用过的Linux命令之ping - 测试与目标主机的连通性 ...
相关推荐
`iconv-lite` 是一个纯 JavaScript 实现的字符编码转换库,它不需要任何 C++ 扩展,因此可以在包括 Windows、Linux、Mac OS X 在内的各种平台上无缝工作。这个库主要设计用于解决 Node.js 应用程序在处理多语言或多...
`iconv` 是一个广泛使用的命令行工具,用于在各种字符编码之间进行转换,确保数据的正确性和可读性。这个工具尤其适用于处理大文件,可以有效地避免出现乱码问题,确保文件内容的完整性和一致性。 ### iconv 的基本...
总的来说,apr-iconv-1.2.1是一个强大且可靠的字符编码转换工具,其核心价值在于提供了一种标准化、跨平台的解决方案,使得开发者能够在不同的编码环境中自由切换,为软件的全球化部署提供了有力的支持。
此外,`ICONV`也可以在命令行环境中直接使用,如在Linux或Unix系统上,通过`iconv`命令来转换文本文件的编码。 总之,`ICONV`字符转换库是处理编码转换问题的重要工具,它为开发者提供了便利,使得在不同编码系统间...
字符编码转换是计算机科学中的一个重要概念,涉及到数据的存储、传输和显示。在处理不同语言或平台时,正确地进行编码转换是确保信息准确无误的关键。`iconv` 是一个广泛使用的命令行工具和库,它允许在不同的字符...
其中,`iconv`是一个广泛使用的命令行工具,它允许用户在各种字符编码之间进行转换,从而解决跨平台、跨语言的数据兼容问题。本文将深入探讨`iconv`工具及其在处理编码转换时的应用。 **1. iconv的基本概念** `...
总的来说,iconv字符集转换库是跨平台、多功能的字符编码转换工具,它使得开发者能够在不同编码之间自由切换,有效地解决了多语言环境下的数据兼容问题。对于任何涉及国际化的软件项目,理解和掌握iconv都是必不可少...
在Linux操作系统中,字符编码和转换是一个至关重要的概念,特别是在处理多语言和跨平台的数据时。`libiconv`是一个广泛使用的开源库,用于在不同的字符集之间进行转换。这个`libiconv-1.1.tar.gz`压缩包包含的就是这...
iconv是一个广泛使用的字符编码转换工具,它能够将一种字符编码的数据流转换成另一种字符编码的数据流。在Windows中使用iconv,你需要下载并编译适用于Windows的iconv库,这通常是一个开源项目,由社区维护和更新。...
其中,encoding 指的是 Vim 内部使用的字符编码方式,fileencoding 指的是当前编辑的文件的字符编码方式,fileencodings 是 Vim 自动探测 fileencoding 的顺序列表,termencoding 指的是终端的字符编码方式。...
在 Linux 系统中修改文本的字符编码需要使用 file 命令和 iconv 工具。file 命令用于确定文件的字符编码,而 iconv 工具用于查看 Linux 系统所支持的文件编码种类和转换文件编码。通过这两个命令,我们可以轻松地...
APR-Iconv是APR的一个扩展,用于在不同编码之间进行字符转换,而APR-Util则包含了更多实用工具,如数据库连接、加密算法、URI处理等。 在Linux系统上安装APR、APR-Iconv和APR-Util通常涉及以下步骤: 1. 更新包...
`iconv` 是一个强大的字符编码转换工具,广泛应用于各种操作系统平台,如Windows和Linux,以处理不同编码格式之间的转换问题。`iconv 1.9.2` 是该工具的一个特定版本,提供了对多种编码的支持,使得在处理多语言环境...
在Linux中,`iconv`函数族提供了非常强大的字符编码转换功能,支持多种不同的编码格式之间的转换。这些函数可以在编程中直接调用,以便开发者能够灵活地处理不同编码格式的数据。 ##### 2.1 函数族介绍 `iconv`...
总之,"iconv lib for ARM Linux"提供了在ARM架构Linux系统上进行字符编码转换的必要工具,通过交叉编译确保了在不同硬件平台上的兼容性和效率。对于开发跨平台应用或处理多编码数据的开发者来说,这是一个至关重要...
本文主要介绍了一个使用shell脚本实现的字符编码转换工具,它支持在UTF-8和GBK之间进行转换。对于需要处理多语言文本或者在不同编码格式之间切换的开发者来说,这个工具非常实用。 首先,我们来看一下这个脚本的...
使用iconv命令进行编码转换 `iconv` 是Linux系统中用于转换文件编码的强大工具之一。它的基本命令格式如下: ``` iconv -f from_encoding -t to_encoding file ``` 其中,`from_encoding` 和 `to_encoding` 分别指...
解决这个问题的一种方法是使用编码转换工具。`iconv`是一个常见的Linux命令行工具,用于在不同字符编码之间进行转换。例如,可以使用以下命令将GBK编码的文件转换为UTF-8: ```bash iconv -f GBK -t UTF-8 input_...
该脚本使用 Bash shell 脚本语言编写,使用 iconv 工具将文件编码格式从 GB2312 转换为 UTF-8 编码。脚本的主要功能是遍历指定目录下的所有文件,如果文件是 Java 文件(以 .java结尾),则将其编码格式转换为 UTF-8...