当前位置: 首页 > news >正文

Ubuntu打开中文文本乱码

文章目录

  • 中文乱码问题
  • 修复乱码
    • 系统字符编码
    • 修改文本编码
    • 修改vim乱码
  • utf-8
    • 编码原理
    • 特点
    • 应用场景
    • 与其他编码的转换
  • iso-8859-1
    • 基本信息
    • 字符涵盖
    • 应用场景
    • 与其他编码的关系

ubuntu打开文本出现乱码,可能是编码没设置对。

中文乱码问题

  1. 使用vim打开文本,或者cat文本都是乱码
cat 1.txt

在这里插入图片描述

修复乱码

系统字符编码

修改/etc/bash.bashrc在最后添加

export LC_ALL="C.UTF-8"

再调用

source /etc/bash.bashrc

修改文本编码

  1. 使用file命令查看文本编码是iso-8859-1
file -bi 1.txt
text/plain; charset=iso-8859-1
  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方法来进行字符编码的转换。
    作者:帅得不敢出门

相关文章:

  • 使用AI应用开发平台搭建夸奖机器人,玩转AI【COZE入门案例-第1课】
  • 说下RabbitMQ的整体架构
  • STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
  • 爬虫技术-利用Python和Selenium批量下载动态渲染网页中的标准文本文件
  • CentOS配置了镜像源之后依旧下载元数据失败
  • 【MCP Node.js SDK 全栈进阶指南】专家篇(2):MCP多模型支持架构
  • CSS--图片链接垂直居中展示的方法
  • 用html+js+css实现的战略小游戏
  • tinyrenderer笔记(透视矫正)
  • 如何搭建spark yarn模式集群的集群
  • 树上背包学习笔记
  • 【mysql】常用命令
  • vue源代码采用的设计模式分解
  • accept() reject() hide()
  • Select Rows组件研究
  • 使用Java和LangChain4j实现人工智能:从分类到生成式AI
  • stm32之输出比较OC和输入捕获IC
  • SQLite数据类型
  • Class AB OPA corner 仿真,有些corenr相位从0开始
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第十一讲)
  • 上海:5月8日起5年以上首套个人住房公积金贷款利率下调至2.6%
  • 动物只有在被认为对人类有用时,它们的建筑才会被特别设计
  • 特朗普称美军舰商船应免费通行苏伊士运河,外交部:反对任何霸凌言行
  • 经济日报:落实落细更加积极的财政政策
  • 指挥家高健:东方市民音乐会“高贵不贵”,我愿意常来
  • 牛市早报|“五一”假期预计跨区域人员流动量累计14.67亿人次