如何在 Linux 中将文件编码转换为 UTF-8

2023-11-07

转自

https://linux.cn/article-7959-1.html


在这篇教程中,我们将解释字符编码的含义,然后给出一些使用命令行工具将使用某种字符编码的文件转化为另一种编码的例子。最后,我们将一起看一看如何在 Linux 下将使用各种字符编码的文件转化为 UTF-8 编码。

你可能已经知道,计算机除了二进制数据,是不会理解和存储字符、数字或者任何人类能够理解的东西的。一个二进制位只有两种可能的值,也就是 0 或 1。其它的任何事物,比如字符、数据和图片,必须要以二进制的形式来表现,以供计算机处理。

简单来说,字符编码是一种可以指示电脑来将原始的 0 和 1 解释成实际字符的方式,在这些字符编码中,字符都以一串数字来表示。

字符编码方案有很多种,比如 ASCII、ANCI、Unicode 等等。下面是 ASCII 编码的一个例子。

 
 
  1. 字符 二进制
  2. A 01000001
  3. B 01000010

在 Linux 中,命令行工具 iconv 用来将使用一种编码的文本转化为另一种编码。

你可以使用 file 命令,并添加 -i 或 --mime 参数来查看一个文件的字符编码,这个参数可以让程序像下面的例子一样输出字符串的 mime (Multipurpose Internet Mail Extensions) 数据:

 
 
  1. $ file -i Car.java
  2. $ file -i CarDriver.java

在 Linux 中查看文件的编码

在 Linux 中查看文件的编码

iconv 工具的使用方法如下:

 
 
  1. $ iconv option
  2. $ iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile

在这里,-f 或 --from-code 表明了输入编码,而 -t 或 --to-encoding 指定了输出编码。

为了列出所有已有编码的字符集,你可以使用以下命令:

 
 
  1. $ iconv -l

列出所有已有编码字符集

列出所有已有编码字符集

将文件从 ISO-8859-1 编码转换为 UTF-8 编码

下面,我们将学习如何将一种编码方案转换为另一种编码方案。下面的命令将会将 ISO-8859-1 编码转换为 UTF-8 编码。

考虑如下文件 input.file,其中包含这几个字符:

 
 

我们从查看这个文件的编码开始,然后来查看文件内容。最后,我们可以把所有字符转换为 UTF-8 编码。

在运行 iconv 命令之后,我们可以像下面这样检查输出文件的内容,和它使用的字符编码。

 
 
  1. $ file -i input.file
  2. $ cat input.file
  3. $ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
  4. $ cat out.file
  5. $ file -i out.file

在 Linux 中将 ISO-8859-1 转化为 UTF-8

在 Linux 中将 ISO-8859-1 转化为 UTF-8

注意:如果输出编码后面添加了 //IGNORE 字符串,那些不能被转换的字符将不会被转换,并且在转换后,程序会显示一条错误信息。

好,如果字符串 //TRANSLIT 被添加到了上面例子中的输出编码之后 (UTF-8//TRANSLIT),待转换的字符会尽量采用形译原则。也就是说,如果某个字符在输出编码方案中不能被表示的话,它将会被替换为一个形状比较相似的字符。

而且,如果一个字符不在输出编码中,而且不能被形译,它将会在输出文件中被一个问号标记 ? 代替。

将多个文件转换为 UTF-8 编码

回到我们的主题。如果你想将多个文件甚至某目录下所有文件转化为 UTF-8 编码,你可以像下面一样,编写一个简单的 shell 脚本,并将其命名为 encoding.sh

 
 
  1. #!/bin/bash
  2. ### 将 values_here 替换为输入编码
  3. FROM_ENCODING="value_here"
  4. ### 输出编码 (UTF-8)
  5. TO_ENCODING="UTF-8"
  6. ### 转换命令
  7. CONVERT=" iconv -f $FROM_ENCODING -t $TO_ENCODING"
  8. ### 使用循环转换多个文件
  9. for file in *.txt; do
  10. $CONVERT "$file" -o "${file%.txt}.utf8.converted"
  11. done
  12. exit 0

保存文件,然后为它添加可执行权限。在待转换文件 (*.txt) 所在的目录中运行这个脚本。

 
 
  1. $ chmod +x encoding.sh
  2. $ ./encoding.sh

重要事项:你也可以使这个脚本变得更通用,比如转换任意特定的字符编码到另一种编码。为了达到这个目的,你只需要改变 FROM_ENCODING 及 TO_ENCODING 变量的值。别忘了改一下输出文件的文件名 "${file%.txt}.utf8.converted".

若要了解更多信息,可以查看 iconv 的手册页man page

 
 
  1. $ man iconv

将这篇指南总结一下,理解字符编码的概念、了解如何将一种编码方案转换为另一种,是一个电脑用户处理文本时必须要掌握的知识,程序员更甚。

最后,你可以在下面的评论部分中与我们联系,提出问题或反馈。


via: http://www.tecmint.com/convert-files-to-utf-8-encoding-in-linux/

作者:Aaron Kili 译者:StdioA 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Linux 中将文件编码转换为 UTF-8 的相关文章

  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • NUMA 在虚拟内存中是如何表示的?

    有许多资源 https en wikipedia org wiki Non uniform memory access从硬件角度描述NUMA的架构性能影响 http practical tech com infrastructure num
  • 如何允许应用程序声明“https”方案 URI? (即如何从 https URL 打开桌面应用程序?)

    目前我正在尝试为 OAuth 2 0 授权流程创建一个客户端 实际上是一个本机应用程序 并且在规范中就在这儿 https www rfc editor org rfc rfc8252 section 7 2据说有 3 种方法来处理重定向 U
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta

随机推荐

  • openpyxl绘制堆叠图

    本文将会说明如何用openpyxl绘制堆叠图 先来看看效果图 数据处理后效果展示 源数据 老规矩源代码先放上后面再解析 使用时记得要改一下路径哦 先把openpyxl全家桶安排上 from openpyxl import load work
  • Python基础08

    Python基础08 学习08 方法没有重载 在其他语言中 可以定义多个重名的方法 只要保证方法标签名唯一即可 方法签名包含3个部分 方法名 参数数量 参数类型 Python中 方法的参数没有生命类型 调用时确定参数的类型 参数的数量也可以
  • hive文件存储格式:SequenceFile系统总结

    问题导读 1 什么是SequenceFile 2 如何 通过 源码实现SequenceFile压缩 3 SequenceFile格式压缩有什么优点和缺点 1 SequenceFile是什么1 1 SequenceFile概述 1 1 seq
  • mapGetters 辅助函数

    1 mapGetters 辅助函数 mapGetters 辅助函数 mapGetters 辅助函数仅仅将store 中的 getter 映射到局部计算属性 1 import mapGetters from vuex 2 export def
  • 列出一个文件夹下的所有文件名(全路径)

    需求 列出一个文件夹下的所有文件的全路径文件名 如果文件是文件夹 那么再次遍历这个文件夹的的所有文件名 直到遍历的文件不是文件夹为止 这时输出文件的全路径名 分析 可以用函数实现 1 函数参数1个 就是要遍历的文件夹的名字 2 遍历该文件夹
  • java垃圾回收机制详解

    文章目录 一 垃圾回收机制是什么 二 机制运行原理 三 机制运行步骤 一 垃圾回收机制是什么 Java的垃圾回收 Garbage Collection GC 机制是Java内存管理的核心部分 它可以自动回收不再被程序使用的内存空间 防止内存
  • Makefile 中:= ?= += =的区别

    在Makefile中我们经常看到 这几个赋值运算符 那么他们有什么区别呢 我们来做个简单的实验 新建一个Makefile 内容为 ifdef DEFINE VRE VRE Hello World else endif ifeq OPT de
  • 今天Chat GPT又胡说八道,看我如何纠正的

    今天想把python pydantic 转成markdown mermaid 就去问Chat GPT Chat GPT给出了如下答案 然后 我就打入命令安装 结果这个包根本就不存在 既然找不到 pydantic 转 mermaid 的工具
  • Docker 安装hadoop

    一 实验环境 实验设备 硬件 单核CPU 内存1G 软件 Ubuntu 16 04操作系统 Docker Hadoop 二 实验原理及内容 1 在Ubuntu系统中安装Docker Apt install docker 复制代码 Apt g
  • Kendo UI开发教程(9): Kendo UI Validator 概述

    Kendo UI Validator 支持了客户端校验的便捷方法 它基于HTML 5 的表单校验功能 支持很多内置的校验规则 同时也提供了自定义规则的便捷方法 完整的Kendo UI 的Validator可以参见API 文档 HTML 5
  • SQL优化

    1 应尽量避免在 where 子句中使用 或 lt gt 操作符 否则将引擎放弃使用索引而进行全表扫描 2 对查询进行优化 应尽量避免全表扫描 首先应考虑在 where 及 order by 涉及的列上建立索引 3 应尽量避免在 where
  • Java 集合 (Set, TreeSet, HashSet)

    目录 1 Set 2 TreeSet 2 1 自然排序 2 2 比较器排序 2 3 两种比较方式小结 3 HashSet 3 1 哈希值 3 2 底层原理 4 小结 1 Set Set 集合特点 可以去除重复 存取顺序不一致 没有带索引的方
  • 手机快充协议

    高通 QC2 0 QC3 0 QC3 5 QC4 0 QC5 0 FCP SCP AFC SFCP MTKPE1 1 PE2 0 PE3 0 TYPEC PD2 0 PD3 0 3 1 VOOC 支持 PD3 0 PD2 0 支持 QC3
  • UML用例图的作用、功能模块图作用与数据库设计三者关系

    这周周一 我们导师要求小组成员开会 我们分别汇报自己的工作 在会中 谈到了用例图 于是我们开始对大家熟悉的用例图进行探讨 经过探讨与自己的思考 我认为应该从以下几个问题来弄清楚用例图的作用 1 用例图由谁来做 为谁做 做完了有什么用途 用例
  • Java8 stream 根据对象字段去重

    public class Java8StreamTest public static class Book private String id private String name public Book String id String
  • attention注意力机制学习

    参考资料 目前主流的attention方法都有哪些 JayLou娄杰的回答 知乎 目前主流的attention方法都有哪些 张戎的回答 知乎 Attention机制解读 高峰OUC的文章 知乎 Transformer详解 一 Attenti
  • linux:filezilla连接ubuntu失败,提示 状态:尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。

    问题 如上 解决办法 发现ping的通 说明是别的问题 可能是端口号不对 sftp与ftp是否没有区别 超级向向阳的回答 知乎 ftp和sftp有什么区别 ftp和sftp哪个速度快 贝锐花生壳官网 ps 如果是连接超时 注意是否开启了防火
  • 记一次sqlmap的--os-shell的实战

    一 站点内容获取 描述 一个后台管理界面 通常我们会尝试使用弱口令爆破 sql注入 万能密码等 在这个站点我们尝试了弱口令爆破没有成功 但尝试sql注入成功了 并且发现了一系列的struts2框架漏洞 并成功接管了站点的数据库等等 二 站点
  • 2023华为OD机试真题【统一限载最小值】【2023.Q1】

    题目描述 火车站附近的货物中转站负责将到站货物运往仓库 小明在中转站负责调度2K辆中转车 K 辆干货中转车 K 辆湿货中转车 货物由不同供货商从各地发来 各地的货物是依次进站 然后小明按照卸货顺序依次装货到中转车上 一个供货商的货只能装到一
  • 如何在 Linux 中将文件编码转换为 UTF-8

    转自 https linux cn article 7959 1 html 在这篇教程中 我们将解释字符编码的含义 然后给出一些使用命令行工具将使用某种字符编码的文件转化为另一种编码的例子 最后 我们将一起看一看如何在 Linux 下将使用