如何解决乱码问题
在使用不同的终端和文件时,会遇到乱码的问题,导致中文无法正常显示。这是因为终端和文件的编码不匹配导致的。本文将介绍如何检查和修改终端和文件的编码,以及如何解决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的编码一致。
通过这些方法,帮助可以避免乱码的问题,让中文能够正常显示。
如果你有任何问题或建议,欢迎在评论区留言。谢谢你的阅读和支持。