前一段时间解决的一个问题,看起来是个小问题,实际解决这个问题却花了一个星期的晚上休息时间,记录分享一下。

问题描述:

linux内核配置中NLS(native language support)已经选择了默认语言配置为utf8,并包含一些其他常用语言的编码,但是在secureCRT的telnet和串口终端显示中文文件名均为乱码。

解决过程:

1.刚开始以为是简单的编码不匹配的问题,修改secureCRT中的传输编码方式从默认变为utf8,中文不再乱码,但变成了问号,“??????”;

2.因为中文目录是在挂载的SD卡中的(居然没有尝试一下网络挂载或者其他的方式下中文是否乱码,汗),怀疑是挂载SD卡方式不对。网上解答全部都是说,编译内核的时候fat文件系统的codepage和isochaset配置对,挂载时选择vfat,-o命令选择codepage和isocharset匹配就好了,具体的命令是,mount -t vfat -o codepage=936,iocharset=utf8 /dev/mmcblk0p1 /home/。然后接下来几天晚上就一直在鼓捣这些东西,无解;

3.有一天忽然找到一篇博文,说是busybox的原因,高版本的busybox取消了中文支持,想不到还有这茬。进入busybox配置,发现已经勾选了Unicode的支持。如此按博文提示,还需要修改busybox中的另外两个文件printable_string.c以及unicode.c,把大于0x7f替换为问号的这个选择条件去掉才行。看了一下源码,觉得改的地方都是不勾Unicode才需要改的……不过还是试一下吧,重新配置编译busybox,替换根文件系统,不过问题依旧……

4.既然上面的提示中已经发现不勾选Unicode支持中文的方式,那就先试一下不支持Unicode显示中文的方式吧,修改printable_string.c以及unicode.c,重新编译,烧写启动设备,发现去掉Unicode果然中文支持了,不再显示问号;

5.但是这样子草草了事明显是不行的,那又是为什么勾选Unicode支持后中文变问号呢?那就只能读源码了,还好范围也可以接受,问题应该就出在修改的两个文件里面。

6.LAST_SUPPORTED_WCHAR,通过busybox源码,可以发现有这么一个判断if (wc > CONFIG_LAST_SUPPORTED_WCHAR){go subset;},而在subset的地方,wc被赋值为问号,这下问题就明朗了,明显是这个LAST_SUPPORTED_WCHAR搞的鬼;

7.查看busybox配置,发现这个宏定义表示的是Range of supported Unicode characters,默认填的值才700多,而中文在Unicode中的位置查了一下最高到U+2FA1D,随便给这个值改了一个大于2FA1D的值,重新编译烧写根文件系统,中文显示成功!

走了不少弯路,好在最后问题是解决了!最后记录一下,busybox版本是1.19.4!

ARM+LINUX嵌入式系统的终端显示中文乱码解决的更多相关文章

  1. secureCRT linux shell显示中文乱码 解决方法

    引:有没有这样的经历: 1.在shell中直接查看包含中文的文件时,出现一堆火星文,不得不下载下来window看. 2.无法正常的在shell中输入中文. 3.make的时候输出一堆乱码. 以下是查阅 ...

  2. Linux中tree无法正常显示中文的解决方法

    tree命令以树状图列出目录的内容. 命令 tree -L n 的时候往往是无法正常显示中文的 先开始我以为是tree命令对中文是不支持的,后来百度了一下,网上有几个解决办法 安装新的tree可以解决 ...

  3. SSH终端显示中文乱码

    出现这种关系,首先想到是因为字符集不匹配导致的.打开SSH客户端,连接到linux虚拟机 在虚拟机中输入#cd /etc#cd sysconfig/ 找到i18ncat i18n 会显示当前的编码类型 ...

  4. Linux显示中文乱码解决方法

    vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB231 ...

  5. navicat for mysql 显示中文乱码解决办法

      最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法 ...

  6. navicat for mysql 导入SQL Server显示中文乱码解决办法

    解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用mysql字符集”前的对勾,在编码里选择utf-8

  7. 批处理bat文件显示中文乱码解决方式

    1.下载Notepad++并安装 2.选择编码,将文件编码转换为ANSI编码

  8. XShell连接 Linux系统,显示中文乱码

    摘要: Linux系统,中文显示乱码 XShell是一个强大的安全终端模拟软件,它支持SSH1, SSH2及 Microsoft Windows平台的Telnet NetSarang Xshell 4 ...

  9. Linux嵌入式系统与硬件平台的关系

    一. Linux嵌入式系统 操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口.它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合 ...

随机推荐

  1. 反编译CMD命令

    1.反XML命令 E:\HuaWei Tools\android\apktool-install-windows-r04-brut1 java -jar AXMLPrinter2.jar  guide ...

  2. Homebrew替换源

    https://www.zhihu.com/question/31360766/answer/74155248 以及 https://www.zhihu.com/question/31360766

  3. 从LeNet到SENet——卷积神经网络回顾

    从LeNet到SENet——卷积神经网络回顾 从 1998 年经典的 LeNet,到 2012 年历史性的 AlexNet,之后深度学习进入了蓬勃发展阶段,百花齐放,大放异彩,出现了各式各样的不同网络 ...

  4. 【C#】自定义容器控件,设置界面控件,支持设计器拖入控件

    先上效果图: 1.先重写设置界面的控件功能: public partial class SetterControl : UserControl { public SetterControl() { I ...

  5. (笔记)Linux内核中内存相关的操作函数

    linux内核中内存相关的操作函数 1.kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) ...

  6. Unity入门教程(下)

    一.概要 在 Unity入门教程(上) 中我们创建了一个游戏项目,并且创建了玩家角色和小球这些游戏对象,还通过添加游戏脚本实现了小方块的弹跳.虽然功能比较简单,但是完整地表现了使用Unity开发游戏的 ...

  7. SpringMVC系列(四)使用 POJO 对象绑定请求参数值

    在实际开发中如果参数太多就不能使用@RequestParam去一个一个的映射了,需要定义一个实体参数对象(POJO)来映射请求参数.Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配 ...

  8. Java虚拟机垃圾收集器与内存分配策略

    Java虚拟机垃圾收集器与内存分配策略 概述 那些内存须要回收,什么时候回收.怎样回收是GC须要完毕的3件事情. 程序计数器.虚拟机栈与本地方法栈这三个区域都是线程私有的,内存的分配与回收都具有确定性 ...

  9. winform 用户控件事件的写法

    public partial class UcTest : UserControl { public UcTest() { InitializeComponent(); } //定义事件 public ...

  10. Jenkins+Github配置【转】

    一.GitHub上配置 前提:Jenkins能正常打开 将本地文件上传到GitHub上:进入终端 cd Documents cd project git clone https://github.co ...