嵌入式linux中文语言支持,嵌入式linux无法显示中文问题
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无法显示中文问题相关推荐
- openwrt web中文语言支持,并设置默认中文
OPENWRT WEB中文语言支持,并设置默认中文 在menuconfig中先选择支持luci-i18n-zh_ch 然后修改配置文件: 修改配置文件,配置默认中文 vim feeds/luci/mo ...
- Rider 中文语言包不再更新了,一样可以添加中文语言包,让编辑器显示中文。
当最新版本没有中文语言包的时候,添加语言包就会存在报错,那么我们如何做不回保存且有效没呢 例如下面这个版本就没有中文语言包,添加低版本语言后会报错 添加中文语言包后 那么如何修改还才不回报错呢. 第一 ...
- linux man 中文 mac,技术|MAC 系统中显示中文MAN手册
最近在做中文MAN手册的翻译,发现MAC系统中的MAN命令不能像多数Linux发行版那样很好的显示中文MAN手册. 根据查找的资料,找到了解决方法: 1.首先要更新你的系统中的 groff 包,MAC ...
- Acrobat 中文语言支持包
便携Acrobat 打开电子发票,提示安装 中文语言支持包,取消后乱码 到Adobe官网现在语言包,无法打开网址. 后,在其他网站下载到一个 PDF reader 的中文语言支持包. 解压后 放置到 ...
- linux命令框显示中文乱码_CentOS终端命令行显示中文乱码的解决方法
这篇文章主要介绍了CentOS终端命令行显示中文乱码的解决方法,以及测试方法和缺少中文字体时的解决方法,需要的朋友可以参考下 安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方 ...
- Matplotlib:在图像上用中文进行标记时,不能显示中文,显示为方框
Matplotlib:在图像上用中文进行标记时,不能显示中文,显示为方框 1.问题背景 2.解决方法 1.问题背景 首先,博主的系统环境如下: Win10 1709 教育版 Anaconda3-5. ...
- linux下默认有哪些语言支持,修改
Linux操作系统下的显示默认支持语言
要领 一:运用 VI 最先 备份你的/etc/sysconfig/i18n文件: 命令: cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bak 运用 :ls / ...
- ubuntu mysql支持中文_ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程序、mysql 数据库不能处理中文的错误...
ubuntu 16.04 对于腾讯云主机要添加源,因为腾讯云主机(CVM)的源库中包很少 文件/etc/apt/sources.list是一个普通可编辑的文本文件,保存了ubuntu软件更新的源服务器 ...
- linux内核长期支持版本,Linux Kernel 3.12长期支持分支迎来第63个维护版本
今天,Linux内核开发者Jiri Slaby宣布长期支持分支Linux Kernel 3.12迎来第63个维护更新版本.在Linux Kernel 3.12.63版本中共计对104份文件进行了调整, ...
- BT3入门之中文语言支持
汉化: 1.更新软件库:apt-get update 2.安装中文语言包:apt-get install language-support-zh apt-get install language- ...
最新文章
- pandas如何读取一个文件夹下的所有文件
- android 无法接收广播_别告诉我你不认识Android中广播接收者(二)
- HDU4160(最小路径覆盖问题)
- 并发编程-21J.U.C组件拓展之Future和FutureTask
- cf831D(dp)
- SpringCloud工作笔记081---SpringCloud Hystrix Turbine(断路器聚合监控)的基本使用
- centos7设置静态IP地址
- android如何查看手机中的db文件,查看sqlite数据库的表结构
- JAVA生成随机昵称
- A Morphable Model For The Synthesis Of 3D Faces 论文解析 3DMM
- RCNN SPPNet Fast R-CNN Faster R-CNN Cascade R-CNN
- 我想找份好工作之“避免入黑坑公司宝典”
- scp 解除链接问题的两个解决方案
- 是男人就要坚持30秒:原生JS小游戏
- 三面(技术+HR面试)网易,分享我的面试经验!(已拿offer)
- java中getter和setter,Java中的Getter和Setter
- shiro整合SSM使用ehcache出现的net.sf.ehcache.CacheException异常解决办法
- 算法分析:方阵的主对角线之上称为“上三角”。
- 间接利用微信压缩视频文件
- 用户体验之认知地图、思维导图和概念图
热门文章
- 使用QT制作的简易计算器
- mtk刷机报错4032专业维修教程(图文)
- 【综述】Deep Learning for Visual Tracking: A Comprehensive Survey-2019
- 工行登录企业网银时,如遇“请确认您已插入工商银行U盾证书,或更换端口后再次尝试登录”提示的解决办法
- multisim 9013、8050免费下载
- 离散数学在计算机相关领域的应用
- java applet插件下载_Java Applet.zip
- 电气simulink常用模块_重庆台达PLC控制柜施工技术标准 - 重庆电工电气
- 11.5 走出来的就业路——《逆袭大学》连载
- 复制错误:安装程序无法复制文件 Atapi.sys