Linux(25) 如何解决Linux终端乱码问题

简介: Linux(25) 如何解决Linux终端乱码问题

如何解决乱码问题

在使用不同的终端和文件时,会遇到乱码的问题,导致中文无法正常显示。这是因为终端和文件的编码不匹配导致的。本文将介绍如何检查和修改终端和文件的编码,以及如何解决adb shell的乱码问题。

测试发现cmd,powershell,包括我使用的终端Termius 发现编码都不一样,那我们来学习一下为什么会导致编码问题,每次查看ls cat看的比吃屎都难受。

什么是编码?

编码是一种规则,用于将字符转换为二进制数据,以便计算机能够存储和传输。不同的编码规则有不同的字符集,即能够表示的字符的范围。常见的编码规则有ASCII、ISO-8859-1、GB2312、GBK、UTF-8等。

为什么会出现乱码?

乱码是因为终端和文件的编码不一致导致的。终端是用于输入和输出数据的界面,例如power shell、cmd、adb shell等。文件是用于存储数据的文本,例如test_gpio.sh、test_gpio_utf8.sh等。当终端和文件使用不同的编码规则时,就会出现乱码。

例如,如果一个文件使用ISO-8859-1编码,它可以表示西欧语言中的字符,但是不能表示中文。如果一个终端使用UTF-8编码,它可以表示多种语言中的字符,包括中文。当这个终端打开这个文件时,就会将文件中的二进制数据按照UTF-8的规则解析,而不是ISO-8859-1的规则。这样就会导致原本应该显示为中文的字符变成了无法识别的符号,即乱码。

如何解决乱码?

要解决乱码,有三种方法:

方法一:检查和修改终端的编码

要检查和修改终端的编码,需要根据不同的终端使用不同的命令。

打开power shell

打开power shell,输入以下命令,查看power shell的编码:

[System.Text.Encoding]::Default

如果power shell的编码是iso-8859-1,那么可以正常执行test_gpio.sh,因为它的编码也是iso-8859-1。但是如果要执行test_gpio_utf8.sh,需要先将power shell的编码设置为UTF-8,例如:

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
在windows上通过打开cmd

在windows上通过打开cmd,输入以下命令,查看cmd的编码:

chcp

如果cmd的编码是65001,那么可以正常执行test_gpio_utf8.sh,因为它的编码也是UTF-8。但是如果要执行test_gpio.sh,需要先将cmd的编码设置为iso-8859-1,例如:

chcp 28591

方法二:检查和修改文件的编码

要检查和修改文件的编码,需要在linux的终端中使用file和iconv命令。

使用file命令检查文件的编码

在linux的终端中,输入以下命令,检查文件的编码是否为UTF-8:

file -bi [filename]

例如:

file -bi test_gpio.sh

输出结果:

text/x-shellscript; charset=iso-8859-1

这说明test_gpio.sh文件使用了iso-8859-1编码。

使用iconv命令转换文件的编码

如果文件的编码不是UTF-8,可以使用iconv命令来转换文件的编码,例如:

iconv -f [encoding] -t utf-8 -o [newfilename] [filename]

例如:

iconv -f iso-8859-1 -t utf-8 -o test_gpio_utf8.sh test_gpio.sh

这会将test_gpio.sh文件的编码从iso-8859-1转换为UTF-8,并保存为test_gpio_utf8.sh文件。

方法三:检查和修改adb shell的编码

要检查和修改adb shell的编码,需要在adb shell中使用echo和export命令。

使用echo命令查看adb shell的编码

在adb shell中,输入以下命令,查看adb shell的编码:

echo $LANG

例如:

echo $LANG

输出结果:

zh_CN.GB2312

这说明adb shell的编码是zh_CN.GB2312,即简体中文的GB2312编码。

使用export命令修改adb shell的编码

如果adb shell的编码是zh_CN.GB2312,那么需要将它设置为和power shell或cmd一致的编码,例如:

export LANG=en_US.UTF-8

或者

export LANG=en_US.ISO-8859-1

这会将adb shell的编码从zh_CN.GB2312修改为en_US.UTF-8或en_US.ISO-8859-1。

总结

乱码是因为终端和文件的编码不匹配导致的。要解决乱码,可以通过以下三种方法:

  • 检查和修改终端的编码,使之和文件的编码一致。
  • 检查和修改文件的编码,使之和终端的编码一致。
  • 检查和修改adb shell的编码,使之和power shell或cmd的编码一致。

通过这些方法,帮助可以避免乱码的问题,让中文能够正常显示。

如果你有任何问题或建议,欢迎在评论区留言。谢谢你的阅读和支持。

相关文章
|
8天前
|
Shell Linux API
C语言在linux环境下执行终端命令
本文介绍了在Linux环境下使用C语言执行终端命令的方法。首先,文章描述了`system()`函数,其可以直接执行shell命令并返回结果。接着介绍了更强大的`popen()`函数,它允许程序与命令行命令交互,并详细说明了如何使用此函数及其配套的`pclose()`函数。此外,还讲解了`fork()`和`exec`系列函数,前者创建新进程,后者替换当前进程执行文件。最后,对比了`system()`与`exec`系列函数的区别,并针对不同场景推荐了合适的函数选择。
|
22天前
|
存储 安全 Linux
|
1月前
|
NoSQL Linux 开发工具
Linux终端革命:掌握这些命令,让工作速度飞跃提升!
本文介绍了Linux命令行操作效率提升的关键技巧,包括光标移动快捷键、Vim编辑器的高效使用、快速切换目录、跨服务器文件拷贝等。通过掌握`Ctrl + a`、`Ctrl + e`等快捷键可加快命令编辑;Vim的`:set nu`、`:20`等命令能提升文本编辑速度;`cd -`命令可在最近访问过的目录间快速切换;利用`nc`或`python -m SimpleHTTPServer`可实现在无密码权限时的文件传输。这些技巧帮助用户提高工作效率,简化日常工作流程。
57 1
|
1月前
|
Linux 数据安全/隐私保护
【Deepin 20 系统】Linux系统在开机时未进入系统前进入命令行界面(终端)
如何在Deepin 20系统启动时进入命令行界面(终端),通过在GRUB界面中编辑内核启动参数来引导系统进入多用户文本模式(运行级别3)。
75 1
|
21天前
|
存储 安全 Linux
Linux新手必备:关机重启、终端操作与快捷键大全
本文专为Linux新手打造,提供全面实用的指南,涵盖关机与重启命令(如`shutdown -h now`立即关机、`reboot`重启)、终端操作技巧(如使用`clear`清屏及Ctrl+L快捷键)、命令历史管理(利用`history`查看过往命令)及高效快捷键(如Ctrl+C复制、Ctrl+V粘贴),助您迅速掌握核心技能,成为Linux操作高手。
22 0
|
2月前
|
Arthas 存储 Java
JVM内存问题之Linux使用ptmalloc2导致的JNI内存溢出问题如何解决
JVM内存问题之Linux使用ptmalloc2导致的JNI内存溢出问题如何解决
|
28天前
|
Ubuntu Linux Shell
Linux 终端入门
Linux 终端入门
16 0
|
2月前
|
Ubuntu Linux 测试技术
Linux终端玩转bastet俄罗斯方块小游戏
【7月更文挑战第14天】Linux终端玩转bastet俄罗斯方块小游戏
45 7
|
29天前
|
Linux
Linux——如何生成一个好看的终端欢迎语
Linux——如何生成一个好看的终端欢迎语
14 0
|
2月前
|
Ubuntu Linux Docker
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决