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的编码一致。

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值