刚开始是bai简单的编码du不匹配情况,修改secureCRT中的传输编码方式从默认zhi变为utf8,中文不再乱码,但变成了问号,dao“???”;
因为中文目录是在挂载的SD卡中的(居然没有尝试一下网络挂载或者其他的方式下中文是否乱码,)。,编译内核的时候fat文件系统的codepage和isochaset配置对,挂载时选择vfat,-o命令选择codepage和isocharset匹配就好了,具体的命令是,mount -t vfat -o codepage=936,iocharset=utf8 /dev/mmcblk0p1 /home/。然后接下来几天晚上就一直在鼓捣这些东西,无解;
高版本的busybox取消了中文支持,进入busybox配置,发现已经勾选了Unicode的支持。还需要修改busybox中的另外两个文件printable_string.c以及unicode.c,把大于0x7f替换为问号的这个选择条件去掉才行。看了一下源码,觉得改的地方都是不勾Unicode才需要改,重新配置编译busybox,替换根文件系统,如果问题还在进行下一步。
既然上面的提示中已经发现不勾选Unicode支持中文的方式,那就先试一下不支持Unicode显示中文的方式吧,修改printable_string.c以及unicode.c,重新编译,烧写启动设备,发现去掉Unicode果然中文支持了,不再显示问号;到这一步还出现问题再进行下一步。
LAST_SUPPORTED_WCHAR,通过busybox源码,可以发现有这么一个判断if (wc > CONFIG_LAST_SUPPORTED_WCHAR){go subset;},而在subset的地方,wc被赋值为问号,明显是这个LAST_SUPPORTED_WCHAR的原因;
查看busybox配置,发现定义表示的是Range of supported Unicode characters,默认填的值才700多,而中文在Unicode中的位置查了一下最高到U+2FA1D,随便给这个值改了一个大于2FA1D的值,重新编译烧写根文件系统,中文显示成功!