在高版本的busybox取消了中文支持,进入busybox配置,发现已经勾选了Unicode的支持。如此按博文提示,还需要修改busybox中的另外两个文件printable_string.c以及unicode.c,把大于0x7f替换为问号的这个选择条件去掉才行。看了一下源码,觉得改的地方都是不勾Unicode才需要改的……不过还是试一下吧,重新配置编译busybox,替换根文件系统,不过问题依旧……
既然上面的提示中已经发现不勾选Unicode支持中文的方式,那就先试一下不支持Unicode显示中文的方式吧,修改printable_string.c以及unicode.c,重新编译,烧写启动设备,发现去掉Unicode果然中文支持了,不再显示问号;
但是这样子草草了事明显是不行的,那又是为什么勾选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的值,重新编译烧写根文件系统,中文显示成功!