1. 前言

网上关于嵌入式linux无法显示中文问题的文章很多,但又没有彻底的解决我的问题,甚是纠结啊...具体不支持的原因是busybox1.17.0之后的版本,shell命令行对中文输入及显示做了强制限制,所以即使内核设置了对中文的支持,但在shell下依然无法显示中文。

2. 问题现象

挂载U盘后,U盘内部为中文的目录和文件分别显示?????

针对此种问题需修改如下:

a. 去掉文件系统对中文的限制

b. 添加内核对中文字符编码的支持(本文档以UTF-8为例)

c. 应用程序选择合适的字符编码(本文档以串口终端软件设置为例)

3. 问题修改

3.1 设置CRT终端为UTF8格式

3.2 busybox修改

本文档以busybox-1.22.1为例,描述如何修改busybox源码。

3.2.1 修改busybox-1.22.1/libbb/printable_string.c

const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str)

{

char *dst;

const char *s;

s = str;

while (1) {

unsigned char c = *s;

if (c == '\0') {

/* 99+% of inputs do not need conversion */

if (stats) {

stats->byte_count = (s - str);

stats->unicode_count = (s - str);

stats->unicode_width = (s - str);

}

return str;

}

if (c < ' ')

break;

//屏蔽以下语句

/*

if (c >= 0x7f)

break;

*/

s++;

}

#if ENABLE_UNICODE_SUPPORT

dst = unicode_conv_to_printable(stats, str);

#else

{

char *d = dst = xstrdup(str);

while (1) {

unsigned char c = *d;

if (c == '\0')

break;

//修改如下代码

//if (c < ' ' || c >= 0x7f)

if (c < ' ')

*d = '?';

d++;

}

if (stats) {

stats->byte_count = (d - dst);

stats->unicode_count = (d - dst);

stats->unicode_width = (d - dst);

}

}

#endif

return auto_string(dst);

}

修改20~24,37~38行代码。

3.2.2 修改busybox-1.22.1/libbb/unicode.c

static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t *stats, const char *src, unsigned width, int flags)

{

char *dst;

unsigned dst_len;

unsigned uni_count;

unsigned uni_width;

if (unicode_status != UNICODE_ON) {

char *d;

if (flags & UNI_FLAG_PAD) {

d = dst = xmalloc(width + 1);

while ((int)--width >= 0) {

unsigned char c = *src;

if (c == '\0') {

do

*d++ = ' ';

while ((int)--width >= 0);

break;

}

/* 将下行代码行修改为:*d++ = (c >= ' ') ? c : '?'; */

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

src++;

}

*d = '\0';

} else {

d = dst = xstrndup(src, width);

while (*d) {

unsigned char c = *d;

/* 将下行代码行修改为:if (c < ' ' ) */

if (c < ' ' || c >= 0x7f)

*d = '?';

d++;

}

}

if (stats) {

stats->byte_count = (d - dst);

stats->unicode_count = (d - dst);

stats->unicode_width = (d - dst);

}

}

return dst;

}

3.2.3 busybox配置

Busybox Settings --->

General Configuration --->

[*] Support Unicode (NEW)

[*] Check $LC_ALL, $LC_CTYPE and $LANG environment variables

3.3 linux内核配置iocharset

File systems --->

-*- Native language support --->

...

Simplified Chinese charset (cp936, GB2312)

...

NLS UTF-8

3.4 挂载U盘显示

以下根据不同的环境使用

utf8格式挂载:

mount -t vfat -o iocharset=utf8 /dev/sda1 /mnt/usb

gb2312格式挂载:

mount -t vfat -o iocharset=cp936 /dev/sda1 /mnt/usb

注:-o iocharset=utf8编码格式的支持

百度文库里有一篇“嵌入式Linux中文字符支持”,具体路径:点击打开链接

嵌入式linux中文语言支持,嵌入式linux无法显示中文问题相关推荐

  1. openwrt web中文语言支持,并设置默认中文

    OPENWRT WEB中文语言支持,并设置默认中文 在menuconfig中先选择支持luci-i18n-zh_ch 然后修改配置文件: 修改配置文件,配置默认中文 vim feeds/luci/mo ...

  2. Rider 中文语言包不再更新了,一样可以添加中文语言包,让编辑器显示中文。

    当最新版本没有中文语言包的时候,添加语言包就会存在报错,那么我们如何做不回保存且有效没呢 例如下面这个版本就没有中文语言包,添加低版本语言后会报错 添加中文语言包后 那么如何修改还才不回报错呢. 第一 ...

  3. linux man 中文 mac,技术|MAC 系统中显示中文MAN手册

    最近在做中文MAN手册的翻译,发现MAC系统中的MAN命令不能像多数Linux发行版那样很好的显示中文MAN手册. 根据查找的资料,找到了解决方法: 1.首先要更新你的系统中的 groff 包,MAC ...

  4. Acrobat 中文语言支持包

    便携Acrobat 打开电子发票,提示安装 中文语言支持包,取消后乱码 到Adobe官网现在语言包,无法打开网址. 后,在其他网站下载到一个 PDF reader 的中文语言支持包. 解压后 放置到  ...

  5. linux命令框显示中文乱码_CentOS终端命令行显示中文乱码的解决方法

    这篇文章主要介绍了CentOS终端命令行显示中文乱码的解决方法,以及测试方法和缺少中文字体时的解决方法,需要的朋友可以参考下 安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方 ...

  6. Matplotlib:在图像上用中文进行标记时,不能显示中文,显示为方框

    Matplotlib:在图像上用中文进行标记时,不能显示中文,显示为方框 1.问题背景 2.解决方法 1.问题背景 首先,博主的系统环境如下: Win10 1709  教育版 Anaconda3-5. ...

  7. linux下默认有哪些语言支持,修改 Linux操作系统下的显示默认支持语言

    要领 一:运用 VI 最先 备份你的/etc/sysconfig/i18n文件: 命令: cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bak 运用 :ls / ...

  8. ubuntu mysql支持中文_ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程序、mysql 数据库不能处理中文的错误...

    ubuntu 16.04 对于腾讯云主机要添加源,因为腾讯云主机(CVM)的源库中包很少 文件/etc/apt/sources.list是一个普通可编辑的文本文件,保存了ubuntu软件更新的源服务器 ...

  9. linux内核长期支持版本,Linux Kernel 3.12长期支持分支迎来第63个维护版本

    今天,Linux内核开发者Jiri Slaby宣布长期支持分支Linux Kernel 3.12迎来第63个维护更新版本.在Linux Kernel 3.12.63版本中共计对104份文件进行了调整, ...

  10. BT3入门之中文语言支持

    汉化: 1.更新软件库:apt-get update 2.安装中文语言包:apt-get install language-support-zh   apt-get install language- ...

最新文章

  1. pandas如何读取一个文件夹下的所有文件
  2. android 无法接收广播_别告诉我你不认识Android中广播接收者(二)
  3. HDU4160(最小路径覆盖问题)
  4. 并发编程-21J.U.C组件拓展之Future和FutureTask
  5. cf831D(dp)
  6. SpringCloud工作笔记081---SpringCloud Hystrix Turbine(断路器聚合监控)的基本使用
  7. centos7设置静态IP地址
  8. android如何查看手机中的db文件,查看sqlite数据库的表结构
  9. JAVA生成随机昵称
  10. A Morphable Model For The Synthesis Of 3D Faces 论文解析 3DMM
  11. RCNN SPPNet Fast R-CNN Faster R-CNN Cascade R-CNN
  12. 我想找份好工作之“避免入黑坑公司宝典”
  13. scp 解除链接问题的两个解决方案
  14. 是男人就要坚持30秒:原生JS小游戏
  15. 三面(技术+HR面试)网易,分享我的面试经验!(已拿offer)
  16. java中getter和setter,Java中的Getter和Setter
  17. shiro整合SSM使用ehcache出现的net.sf.ehcache.CacheException异常解决办法
  18. 算法分析:方阵的主对角线之上称为“上三角”。
  19. 间接利用微信压缩视频文件
  20. 用户体验之认知地图、思维导图和概念图

热门文章

  1. 使用QT制作的简易计算器
  2. mtk刷机报错4032专业维修教程(图文)
  3. 【综述】Deep Learning for Visual Tracking: A Comprehensive Survey-2019
  4. 工行登录企业网银时,如遇“请确认您已插入工商银行U盾证书,或更换端口后再次尝试登录”提示的解决办法
  5. multisim 9013、8050免费下载
  6. 离散数学在计算机相关领域的应用
  7. java applet插件下载_Java Applet.zip
  8. 电气simulink常用模块_重庆台达PLC控制柜施工技术标准 - 重庆电工电气
  9. 11.5 走出来的就业路——《逆袭大学》连载
  10. 复制错误:安装程序无法复制文件 Atapi.sys