Ubuntu打开中文文本乱码
文章目录
- 中文乱码问题
- 修复乱码
- 系统字符编码
- 修改文本编码
- 修改vim乱码
- utf-8
- 编码原理
- 特点
- 应用场景
- 与其他编码的转换
- iso-8859-1
- 基本信息
- 字符涵盖
- 应用场景
- 与其他编码的关系
ubuntu打开文本出现乱码,可能是编码没设置对。
中文乱码问题
- 使用vim打开文本,或者cat文本都是乱码
cat 1.txt
修复乱码
系统字符编码
修改/etc/bash.bashrc在最后添加
export LC_ALL="C.UTF-8"
再调用
source /etc/bash.bashrc
修改文本编码
- 使用file命令查看文本编码是iso-8859-1
file -bi 1.txt
text/plain; charset=iso-8859-1
- 转换文本编码
先转换再打开
使用iconv,其命令方式如下
iconv -f 原编码 -t UTF - 8 原文件名 -o 新文件名
针对本例命令改为
iconv -f iso-8859-1 -t UTF-8 1.txt -o 1.txt
再cat发现还是乱码,正确命令如下
iconv -f GBK -t UTF-8 1.txt -o 1.txt
或者先打开文本再转换
cat 1.txt | iconv -f GBK -t UTF-8
这两种方式cat都正常了,但是使用vi打开文本还是乱码。
修改vim乱码
/etc/vim/vimrc添加以下内容
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc
utf-8
编码原理
UTF - 8 使用 1 到 4 个字节来表示一个字符。对于 ASCII 码中的字符(0 - 127),UTF - 8 用 1 个字节表示,且编码与 ASCII 码相同,这保证了对 ASCII 字符的向后兼容性。对于其他 Unicode 字符,根据字符的 Unicode 码点大小,使用不同数量的字节进行编码。例如,常用的汉字通常用 3 个字节表示。
特点
- 通用性:它可以表示 Unicode 字符集中的任意字符,涵盖了世界上几乎所有的语言和符号,包括各种生僻的汉字、少数民族文字、特殊符号等,具有很强的通用性和兼容性。
- 变长编码:根据字符的使用频率来动态调整编码长度。对于频繁使用的字符,如 ASCII 字符,采用较短的编码长度,而对于不常用的字符则使用较长的编码长度,这样可以在存储和传输文本数据时节省空间。
- 自同步性:UTF - 8 编码具有自同步特性,即从任何位置开始读取字节流,都能快速确定每个字符的边界,便于对文本进行处理和解析,提高了数据处理的效率和准确性。
应用场景
- 网络应用:在互联网上,UTF - 8 是主流的字符编码。几乎所有的网页、电子邮件、XML 和 JSON 数据等都使用 UTF - 8 编码来确保不同语言和地区的用户能够正确地显示和交互文本信息。
- 操作系统:现代操作系统如 Windows、macOS 和 Linux 等都广泛支持 UTF - 8 编码,将其作为默认或重要的字符编码之一,用于文件系统、终端输入输出以及各种应用程序的文本处理。
- 数据库:许多数据库系统也支持 UTF - 8 编码,用于存储和查询各种语言的文本数据,保证了多语言环境下数据的正确存储和检索。
与其他编码的转换
可以使用多种工具和编程语言中的相关函数来实现 UTF - 8 与其他编码(如 ISO - 8859 - 1、GBK 等)之间的转换。例如,在 Java 中,可以使用InputStreamReader和OutputStreamWriter来进行不同编码之间的转换操作;在 Python 中,可以使用encode和decode方法来实现字符编码的转换。但在转换过程中需要注意字符集的兼容性,以避免数据丢失或乱码问题。
iso-8859-1
ISO - 8859 - 1 是一种字符编码标准,也被称为 Latin - 1。以下是关于它的详细介绍:
基本信息
- 定义:ISO - 8859 - 1 是国际标准化组织(ISO)制定的 ISO - 8859 字符集系列中的第一个编码标准,主要用于表示西欧语言的字符。
- 编码范围:它使用单字节编码,能表示 256 个不同的字符,编码范围从 0x00 到 0xFF。
字符涵盖
- 控制字符:包含了一些标准的 ASCII 控制字符,如换行、回车等,用于控制文本的格式和传输。
- 可打印字符:包括了大写和小写的英文字母、数字、标点符号以及一些特殊字符,如@、#、$等。此外,还涵盖了西欧语言中常见的带重音符号的字母,如á、é、í、ó、ú等,这使得它能够满足大多数西欧语言的基本字符表示需求。
应用场景
- 历史应用:在早期的计算机系统和互联网应用中广泛使用,特别是在处理西欧语言的文本数据时。例如,在 HTML 4.01 标准中,ISO - 8859 - 1 是默认的字符编码之一,许多早期的网页也是使用该编码来显示文本内容。
- 特定领域:尽管现在 UTF - 8 等更通用的编码逐渐占据主导地位,但 ISO - 8859 - 1 在一些特定领域仍然有应用。比如,在一些旧版的软件系统、遗留的文本文件格式以及某些特定的工业控制系统中,可能还会使用 ISO - 8859 - 1 编码来保证与原有系统的兼容性。
与其他编码的关系
- 与 ASCII 的关系:ISO - 8859 - 1 的前 128 个字符(0x00 - 0x7F)与 ASCII 编码完全相同,这保证了它与早期基于 ASCII 的系统和应用的兼容性。
- 与 UTF - 8 的转换:由于 ISO - 8859 - 1 和 UTF - 8 都是常见的字符编码,在实际应用中经常需要进行转换。可以使用各种编程语言中的字符编码转换函数或工具来实现两者之间的转换。例如,在 Python 中,可以使用encode和decode方法来进行字符编码的转换。
作者:帅得不敢出门