在Linux如何让更改文件的字符编码

问题:在我的 Linux 系统中有一个编码为 iso-8859-1 的字幕文件,其中部分字符无法正常显示,我想把文本改为 utf8 编码。在 Linux 中, 有没有一个好的工具来转换文本文件的字符编码?

正如我们所知道的那样,电脑只能够处理低级的二进制值,并不能直接处理字符。当一个文本文件被存储时,文件中的每一个字符都被映射成二进制值,实际存储在硬盘中的正是这些“二进制值”。之后当程序打开文本文件时,所有二进制值都被读入并映射回原始的可读字符。只有当所有需要访问这个文件的程序都能够“理解”它的编码,即二进制值到字符的映射时,这个“保存和打开”的过程才能很好地完成,这也确保了可理解数据的往返过程。

如果不同的程序使用不同的编码来处理同一个文件,源文件中的特殊字符就无法正常显示。这里的特殊字符指的是非英文字母的字符,例如带重音的字符(比如 ñ,á,ü)。

然后问题就来了: 1)我们如何确定一个确定的文本文件使用的是什么字符编码? 2)我们如何把文件转换成已选择的字符编码?

步骤一

为了确定文件的字符编码,我们使用一个名为 “file” 的命令行工具。因为 file 命令是一个标准的 UNIX 程序,所以我们可以在所有现代的 Linux 发行版中找到它。

运行下面的命令:

$ file --mime-encoding filename 

步骤二

下一步是查看你的 Linux 系统所支持的文件编码种类。为此,我们使用名为 iconv 的工具及 “-l” 选项(L 的小写)来列出所有当前支持的编码。

$ iconv -l 

iconv 工具是 GNU libc 库组成部分,因此它在所有 Linux 发行版中都是开箱即用的。

步骤三

在我们在我们的 Linux 系统所支持的编码里面选定了目标编码之后,运行下面的命令来完成编码转换:

$ iconv -f old_encoding -t new_encoding filename

例如,把 iso-8859-1 编码转换为 utf-8 编码:

$ iconv -f iso-8859-1 -t utf-8 input.txt 

时间: 11-14

在Linux如何让更改文件的字符编码的相关文章

Linux shell 命令 转换文件的字符编码

windows 上默认的简体中文字符编码是GBK,而Linux是UTF-8(这里的描述好像并不准确,字符编码与字符集应该不是一回事,还没搞清楚). 查看文件编码:(enca 软件包可能并没有默认安装,用apt-get install enca或yum install enca等命令安装即可): $ enca filename GB2312编码的文件输出: Simplified Chinese National Standard; GB2312 CRLF line terminators 将文件编

Gnu Linux下文件的字符编码及转换工具

/*********************************************************************  * Author  : Samson  * Date    : 07/03/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

Linux系统入门学习:在 Linux 如何更改文本文件的字符编码

为了确定文件的字符编码,我们使用一个名为 "file" 的命令行工具.因为 file 命令是一个标准的 UNIX 程序,所以我们可以在所有现代的 Linux 发行版中找到它. 运行下面的命令: $ file –mime-encoding filename(我在mac中直接file就ok) 下一步是查看你的 Linux 系统所支持的文件编码种类.为此,我们使用名为 iconv 的工具及 "-l" 选项(L 的小写)来列出所有当前支持的编码. $ iconv -l ic

eclipse设置新建jsp文件默认字符编码为utf-8

在使用Eclipse开发中,编码默认是ISO-8859-1,不支持中文.这样我们每次新建文件都要手动修改编码,非常麻烦.其实我们可以设置文件默认编码,今后再新建文件时就不用修改编码了. 1.打开Eclipse,点击Window弹出下拉列表,选择Preference: 2.然后在弹出的Preference设置里,找到Web,并点击JSP Files,我们可以看到默认的jsp文件的字符编码是ISO-8859-1(ISO Latin-1) 在右边把Encoding设置为ISO 10646/Unicod

Linux 命令 - chmod: 更改文件模式

文件的模式 当使用 ls -l 命令查看目录内容时 [[email protected] cmdline]$ ls -l /etc/passwd -rw-r--r-- 1 root root 1917 Jul 2 15:01 /etc/passwd 第一列字段是文件模式.第一个字符表示文件类型,这里 "-" 表示该文件是个普通文件.后面的 9 个字符表示文件的访问权限,分为读权限.写权限和执行权限,又分别针对三种对象:所有者.同组用户和其他用户.这里 "-rw-r--r--&

Python——day3_基础1_集合,文件操作,字符编码与转码

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

Python-3 文件和字符编码

文件 打开文件模式 ''' "r"只读模式(默认). w,只写模式,不可读,不存在则创建:存在则删除内容 a,追加模式,可读,不存在则创建:存在则只追加内容 x, 写模式,当文件系统上不存在,才可以写.也就是不允许覆盖已存在的文件内容 "+"表示可以同时读写某个文件: r+,可读写文件.可读:可写:可追加 w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成\n(与r或r+ 模式同使用): rU r+U "

LINUX中块设备文件和字符设备文件的本质区别

在LINUX系统文件类型分类的文章中我们提到了 块设备 和 字符设备文件,那么什么是块设备 字符设备文件呢?他们之间有什么本质上的区别呢? 设备文件分为 Block(块) Device Driver 和 Character(字符)Device Drive 两类.Character Device Drive又被称为字符设备或裸设备 raw  devices. Block Device Driver称为块设备. 区别: Block Device Driver 是以固定大小长度来传送转移资料,Char

python基础11 文件操作 ,字符编码

主要内容 文件操作 文件操作 打开文件的模式 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建. "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模