2014-10-27 23:54:53 +08:00
|
|
|
|
Linux 有问必答 -- 在 Linux 如何更改文本文件的字符编码
|
2014-10-22 15:00:07 +08:00
|
|
|
|
================================================================================
|
2014-10-27 23:54:53 +08:00
|
|
|
|
> **问题**:在我的 Linux 系统中有一个编码为 iso-8859-1 的字幕文件,其中部分字符无法正常显示,我想把文本改为 utf8 编码。在 Linux 张, 有没有一个好的工具来转换文本文件的字符编码?
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
正如我们所知道的那样,电脑只能够处理低级的二进制数字,并不能直接处理字符。当一个文本文件被存储时,文件中的每一个字符都被映射成二进制数字,实际存储在硬盘中的正是这些“二进制数字”。之后当程序打开文本文件时,所有二进制数字都被读入并映射回原始的可读字符。只有当所有需要访问这个文件的程序都能够“理解”它的编码,即二进制数字到字符的映射时,这个“保存和打开”的过程才能很好地完成,这也确保了可理解数据的往返过程。
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
如果不同的程序使用不同的编码来处理同一个文件,源文件中的特殊字符就无法正常显示。这里的特殊字符指的是非英文字母的字符,例如带重音的字符(比如 ñ,á,ü)。
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
然后问题就来了: 1)我们如何确定一个确定的文本文件使用的是什么字符编码? 2)我们如何把文件转换成已选择的字符编码?
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
### 步骤一 ###
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
为了确定文件的字符编码,我们使用一个名为 “file” 的命令行工具。因为 file 命令是一个标准的 UNIX 程序,所以我们可以在所有现代的 Linux 发行版中找到它。
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
运行下面的命令:
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
|
|
|
|
$ file --mime-encoding filename
|
|
|
|
|
|
|
|
|
|
![](https://farm6.staticflickr.com/5602/15595534261_1a7b4d16a2.jpg)
|
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
### 步骤二 ###
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
下一步是查看你的 Linux 系统所支持的文件编码种类。为此,我们使用名为 iconv 短工具及 “-l” 选项(L 的小写)来列出所有当前支持的编码。
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
|
|
|
|
$ iconv -l
|
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
iconv 工具是 GNU libc 库组成部分,因此它在所有 Linux 发行版中都是开箱即用的。
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
### 步骤三 ###
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
在我们在我们的 Linux 系统所支持的编码里面选定了目标编码之后,运行下面的命令来完成编码转换:
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
|
|
|
|
$ iconv -f old_encoding -t new_encoding filename
|
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
例如,把 iso-8859-1 编码转换为 utf-8 编码:
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
|
|
|
|
$ iconv -f iso-8859-1 -t utf-8 input.txt
|
|
|
|
|
|
|
|
|
|
![](https://farm4.staticflickr.com/3943/14978042143_a516e0b10b_o.png)
|
|
|
|
|
|
2014-10-27 23:54:53 +08:00
|
|
|
|
了解了我们演示的如何使用这些工具之后,你可以像下面这样修复一个受损的字幕文件:
|
2014-10-22 15:00:07 +08:00
|
|
|
|
|
|
|
|
|
![](https://farm6.staticflickr.com/5612/15412197967_0dfe5078f9_z.jpg)
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: http://ask.xmodulo.com/change-character-encoding-text-file-linux.html
|
|
|
|
|
|
2014-10-22 18:10:35 +08:00
|
|
|
|
译者:[wangjiezhe](https://github.com/wangjiezhe)
|
2014-10-22 15:00:07 +08:00
|
|
|
|
校对:[校对者ID](https://github.com/校对者ID)
|
|
|
|
|
|
2014-10-22 18:10:35 +08:00
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|