不需要熟悉,但需要了解的libiconv库

简介: 但是很多老式的计算机还在使用当地的传统的字符编码方式。而一些程序,例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换。其他的一些程序则内置支持Unicode,以顺利支持国际化的处理,但是仍然有在Unicode和其他的传统编码之间转换的需求。GNU的libiconv就是为这两种应用设计的编码转换库。

1 libiconv的历史

在一个偶然的机会下,我认识了libiconv库。首先让我们先看下百科给予我们的解释:

随着互联网时代的到来,通过互联网进行文字交流也逐渐增多:浏览外国的网站,这个时候字符编码的转换变得尤为重要。这带来了一个问题,就是许多字符在某一种编码方式中没有。为了解决这种混乱,Unicode的编码方式被建立。Unicode是一种超级编码包含了所有这些编码的字符集,因此一些新的文本格式像XML的默认编码方式就是Unicode.


但是很多老式的计算机还在使用当地的传统的字符编码方式。而一些程序,例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换。其他的一些程序则内置支持Unicode,以顺利支持国际化的处理,但是仍然有在Unicode和其他的传统编码之间转换的需求。GNU的libiconv就是为这两种应用设计的编码转换库。


由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码。所以,我们需要这个libiconv库。


2 如何学习libiconv

libiconv库是一个基于GNU协议的开源库,主要是解决多语言编码处理转换等应用问题。流行的字符编码格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是专门处理中文编码的。

如果大家需要了解的更新更细,可以看下他的官方所提供的信息,官方地址:https://www.gnu.org/software/libiconv/

如果想要下载最新的版本,也可以在官方提供的地方下载:https://www.gnu.org/software/libiconv/#downloading ,其他版本下载,我这里找到一个网址,也提供出来:https://mirrors.sjtug.sjtu.edu.cn/gnu/libiconv/ 如果有需要,也可以在这里看到。

image.png


3 通常的安装方式

首先,从官方提供的下载页面下载包压缩包,解压后进入包内

$ tar zxvf libiconv-1.17.tar.gz
$ cd libiconv-1.17

然后,编译安装libiconv库

$ ./configure --prefix=/usr/local
$ make
$ make install


详细的安装过程可见源码包中的INSTALL.generic文档,里面详细介绍了编译选项的不同作用,也可以通过命令“./configure --help”进行查看。


4 libiconv如何使用?

使用的方式我就不多做介绍了,这里提供下官网提供的使用方式:https://www.gnu.org/savannah-checkouts/gnu/libiconv/documentation/libiconv-1.17/iconv.1.html

首先查看下系统的编码,我当时的操作环境是Linux(CentOS 7)

$ echo $LANG
zh_CN.UTF-8


可以看出来,当前操作系统的编码为“zh_CN.UTF-8”,而并不是为“UTF-8”。

其次,我想要转换编码。例如,我想要把文件转为UTF-8后在输出出来:

$ iconv -f ISO-8859-1 -t UTF-8 dsg_$date_$ip.log


其中,

  • -f:输入编码
  • -t:输出编码
  • -l:列出所有已知的编码
  • -o:输出文件


注意⚠️:$date是按照天来生成的日志文件名称的一部分,$ip是当前机器的IP。这里想说下,为啥我要看这个我也不知道是啥的,因为在编写shell脚本的时候,脚本放在几台机器上面,由于机器并不是我司,而是在第三方借用的机器,机器的编码也不一致,导致在shell脚本输出日志时,编码不一致,有乱码产生,所以当时就为了研究下,而找到了这个转码方式。


总结

有问题不怕,要相信解决办法总比问题多。





相关文章
|
6月前
|
Unix Windows Perl
Perl 教程 之 Perl 包和模块 4
Perl教程讲解了包和模块的使用。`require`和`use`函数都能调用模块,但有区别:`require`在运行时加载,需指定包名调用函数;`use`在编译时加载,无需包名且能引入子模块。`use`根据@INC路径找模块,`require`可指定路径。通过`use Exporter`, `@ISA = qw(Exporter)`, `@EXPORT`数组可导出默认符号。示例中展示了如何定义和导出模块中的函数。
43 3
|
6月前
|
Perl
Perl 教程 之 Perl 包和模块 1
Perl教程介绍了包和模块的概念。包是具有独立符号表的命名空间,允许在同一程序中使用相同变量名而不冲突。通过`package mypack;`定义包,使用`包名::变量名`来访问其他包的变量。示例展示了`main`和`Foo`两个包的交互,利用`__PACKAGE__`变量显示当前包名。程序输出显示了不同包中变量的独立性。
44 2
|
6月前
|
Perl
Perl 教程 之 Perl 包和模块 6
在Perl教程中,了解Perl包和模块的安装:解压Person.tar.gz,进入目录,运行"perl Makefile.PL"生成Makefile,接着"make"编译,"make test"检查,最后"make install"安装到系统。
46 0
|
6月前
|
存储 Linux Perl
Perl 教程 之 Perl 包和模块 5
Perl模块创建可借助h2xs工具,如`h2xs -AX -n Person`来生成模块Person,包括README、Changes、Makefile.PL、MANIFEST、Person.pm测试脚本等文件。MANIFEST用于打包tar.gz发布到CPAN或分享。lib/存储源码,t/存放测试脚本。
63 0
|
6月前
|
JSON 开发工具 开发者
CMake进阶教程:深入FetchContent与ExternalProject模块
CMake进阶教程:深入FetchContent与ExternalProject模块
511 0
|
Linux
freetype库的移植
freetype库的移植
353 0
SWIG:SWIG的简介、安装、使用方法之详细攻略
SWIG:SWIG的简介、安装、使用方法之详细攻略
SWIG:SWIG的简介、安装、使用方法之详细攻略
|
Ubuntu Windows
zlib开发笔记(二):zlib库介绍、ubuntu平台编译和工程模板
zlib开发笔记(二):zlib库介绍、ubuntu平台编译和工程模板
zlib开发笔记(二):zlib库介绍、ubuntu平台编译和工程模板
libzip开发笔记(一):libzip库介绍、编译和工程模板
libzip开发笔记(一):libzip库介绍、编译和工程模板
libzip开发笔记(一):libzip库介绍、编译和工程模板
|
Ubuntu Windows
zlib开发笔记(一):zlib库介绍、编译和工程模板
zlib开发笔记(一):zlib库介绍、编译和工程模板
zlib开发笔记(一):zlib库介绍、编译和工程模板
下一篇
无影云桌面