您尚未登录。

楼主 # 2024-06-06 08:59:26

memory
会员
注册时间: 2021-08-11
已发帖子: 302
积分: 278

T113 Busybox ls 支持中文的解决办法

在嵌入式T113 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,可按下H查看帮助说明 */

二、设置系统的 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 == '\0')
     break;
   if (c < ' ' || c >= 0x7f)
     *d = '?';
    d++;

把 if (c < ' ' || c >= 0x7f)  改成   if (c < ' ')

a.修改busybox源码目录下的./libbb/unicode.c


在配置里,如果Support Unicode选上的:

   
Busybox Settings->
General Configuration->  
[*] Enable locale support (system needs locale for this to work)         
[*] Support Unicode                                                      
[*] Support for --long-options


那么这样还需要修改一个文件,这个文件就是:unicode.c。如果不修改这个文件,ls命令也是无法显示出中文的。
在函数unicode_conv_to_printable2中

将*d++ = (c >= ' ' && c < 0x7f) ? c : '?'; 修改为*d++ = (c >= ' ') ? c : '?';

if(c<'' || c>=0x7f)
    *d='?';
修改为
if(c<'')
*d='?';

总之将所有对0x7f的判断条件去掉。


原文链接:https://blog.csdn.net/qpwyj/article/details/41985797

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn