开发板串口终端shell中文或者其他国家语言显示乱码或者问号?的解决办法

1、环境

平台:IMX6DL
内核版本:linux4.1.5
交叉编译器:arm-linux-gnueabihf-
开发环境:Ubuntu16.04

2、问题描述

从window端创建的文件名在window端显示正常,但是将文件拷入U盘,开发板通过U盘挂载的方式查看里面的文件名或者文件夹,显示都是????或者乱码之类的;或者从开发板创建的文件名传入到window端,显示也是乱码。
在这里插入图片描述

在这里插入图片描述

3、问题解析

window端和linux端的编码不一样导致的这一现象。

4、问题解决

1、首先配置内核,新增
开发板串口终端shell中文或者其他国家语言显示乱码或者问号?的解决办法_第1张图片
开发板串口终端shell中文或者其他国家语言显示乱码或者问号?的解决办法_第2张图片
开发板串口终端shell中文或者其他国家语言显示乱码或者问号?的解决办法_第3张图片
将配置好的内核重新编译一次,然后烧写到IMX6DL核心板上,重新上电。

2、文件系统的配置
查看文件系统是否有locale、localedef指令,如果没有这条指令,可以将交叉编译器中的指令locale移植进来。

使用locale -a指令查看当前系统之前几种配置

root@imx6dlsabresd:/udisk# locale -a
 C
 en_GB
 en_US 
 POSIX

如果只支持C和POSIX的话,需要自己弄一个新的字符集,请查看第五点:

使用locale查看当前文件系统默认采用的字符集,系统默认为POSIX,LANG为空

root@imx6dlsabresd:~# locale   
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

接下来重新设置环境变量:

root@imx6dlsabresd:/# export LANG=en_GB
root@imx6dlsabresd:/# locale
LANG=en_GB
LC_CTYPE="en_GB"
LC_NUMERIC="en_GB"
LC_TIME="en_GB"
LC_COLLATE="en_GB"
LC_MONETARY="en_GB"
LC_MESSAGES="en_GB"
LC_PAPER="en_GB"
LC_NAME="en_GB"
LC_ADDRESS="en_GB"
LC_TELEPHONE="en_GB"
LC_MEASUREMENT="en_GB"
LC_IDENTIFICATION="en_GB"
LC_ALL=

如果成功环境都配置成功的话,重新查看ls,如下图所示,会显示中文或者其他国家语言文字了,而不是乱码。
开发板串口终端shell中文或者其他国家语言显示乱码或者问号?的解决办法_第4张图片

5、新增新的字符集

首先需要查看文件系统是否有/usr/share/i18n/文件夹,没有的话,需要从交叉编译器中的软件包拷贝过来,如下图。
开发板串口终端shell中文或者其他国家语言显示乱码或者问号?的解决办法_第5张图片
如果没有该路径/usr/lib/locale文件夹的话,需要自己手动创建。

执行以下指令:

root@imx6dlsabresd:~# localedef -f UTF-8 -i zh_CN $PWD/zh_CN.UTF8
root@imx6dlsabresd:~# cp $PWD/zh_CN.UTF8 /usr/lib/locale
root@imx6dlsabresd:~# locale -a //查看支持所有字符集
C
POSIX
en_GB
en_US
zh_CN.UTF8
root@imx6dlsabresd:~# export LANG=zh_CN.UTF8

完成上面的操作后,你查看时间会发现年月日都变成了中文
在这里插入图片描述

如果觉得有用的话,给博主点个赞,谢谢

你可能感兴趣的:(linux日常维护,arm开发,linux,运维)