Busybox支持中文的解决办法

2019-07-12 23:19发布

在嵌入式Linux中,在终端中若输入ls命令,显示乱码等问题,可通过以下步骤解决。 一、配置内核 File systems ---> *- Native language support ---> <* > Simplified Chinese charset (CP936, GB2312) <* > NLS UTF-8 File systems ---> DOS/FAT/NT Filesystems ---> <*> MSDOS fs support <*> VFAT (Windows-95) fs support (936) Default codepage for FAT (cp936) Default iocharset for FAT /* 括弧中的值可以是utf8或cp936,可按下?查看帮助说明 */
二、设置系统的 LANG 为 zh_CN.UTF-8 可在/etc/profile文件中添加  export LANG=zh_CN.UTF-8三、挂载U盘时指定字符编码 mount -t vfat -o codepage=936,iocharset=utf8 /dev/sda1 /mnt若按照上面的选项配置内核,不使用-o选项挂载,则默认就是内核中设定的值,根据实际情况设定。
四、设置secureCRT
设置secureCRT的编码格式为utf-8
五、配置修改busybox 从busybox1.17.0以后,对ls命令不做修改是无法显示中文的。就算是内核设置了支持中文的话,在shell下用ls命令也是无法显示中文的,这是因为busybox1.17.0以后版本对中文的支持进行了限制。现在就来讲讲如何修改让busybox1.17.0以上版本支持中文,要想让busybox1.17.0以上支持中文,需要修改两个文件:printable_string.c以及unicode.c 。
分析源码发现busybox将字符大于0x7f的替换为?。 a.修改busybox源码目录下的./libbb/printable_string.c
先找到这样一段:
if (c < ' ') break; if (c >= 0x7f) break; s++;注释掉某两行(34,35行):
/* if (c >= 0x7f) */ /* break; */
然后找这样一段(48行):
unsigned char c = *d; if (c == '