以前做GSM中文短信时就想彻底解决字符编码转换的问题,结果一直拖到现在。这两天在我实现开发板终端显示中文文件名时,又遇到了字符编码转换,也碰到了很多问题,由于时间紧迫,我分条列出(比较杂乱,我是想到哪写到哪,“时间紧”),就不在拘泥于格式了。希望对碰到同样问题的朋友有些许帮助。
(1)安装convmv工具可 改变文件名的编码格式,iconv 是改变文件内容编码的工具。convmv的具体用法: convmv -f 源编码 -t 新编码 [选项] 文件名
(2)将cp936,编进内核。
luther@gliethttp:/vobs/works/linux-2.6.30.4$ make menuconfig
File systems --->
-*- Native language support --->
<M> Simplified Chinese charset (CP936, GB2312)
(3)若系统已安装了,中文编码,则需要做以下配置
编辑/etc/sysconfig下面的i18n文件(注意备份一下该文件)。
改为
LANG="zh_CN.GB2312"
LANGUAGE="zh_CN.GB2312:zh:CN"
SUPPORTED="zh_HK.UTF-8:zh_HK:zh_CN:zh:z"
(4)locale -a会显示 所有与locale有关的环境变量,在开发板/etc/profile文件下添加环境变量 声明
export LC_ALL=字符编码 reboot 就会将locale所有的环境变量改成LC_ALL的值。
(5)挂载U盘时可以用
# mount -t vfat -o iocharset=cp936 /dev/mtdblock3 /mnt/ U盘目录下就可以显示中文文件名了
(6)
LC_ALL 环境变量在/etc/profile 中设置export LC_ALL=
上面错误的原因是zh_CN.GB2312这个语言配置文件包 应该放在开发板/usr/lib/locale目录下,而非/lib目录下 locale可执行文件放在了开发板的bin目录下
1、语言包大多在交叉链 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/locale/目录下
2、sudo cp -r /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/share/i18n/ /nfsroot/rootfs/usr/share/(目录下的东西作用未知)
3、locale 可执行文件所在目录(ARMV4架构) sudo cp -r /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/bin
windows下建立的中文名编码格式为国标2312
locale-archive 在/usr/lib/locale/ locale-archive
(7)开发板/usr/lib/locale/下面的文件的, 比如命令:
localedef -c -v -f GB2312 -i zh_CN zh_CN.gb2312 --prefix=/usr
它就会/usr/lib/locale/下面生成 zh_CN.gb2312 ,为了什么兼容性, 要:
mv zh_CN.gb2312 zh_CN.GB2312
(8)convmv 加一个参数 --nosmart 另外, convmv 默认只是测试不实际改文件名
要实际改文件名要再加参数 --notest
(9)与locale有关的文件在 ARM-LINUX-GCC中的位置
1、locale可执行文件在 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/bin 目录下这个目录下的可执行文件,都是一些很关键的工具例如还有 ldd iconv localedef等很给力的工具。这些工具是编译glibc时生成的,这个需要在编译glibc前配置确定是否生成。另外
locale-archive 在/usr/lib/locale/ locale-archive 也是在glibc编译后生成的。
2、语言包在交叉链 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/locale/目录下 需要哪个就可以往根文件系统/usr/lib/locale/ 目录下CP
cp完后,并配置好环境变量LC_ALL,最后用locale -a更新整个配置。
3、/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/share/i18n/
有 charmaps 和 locales 文件 需要放到开发板/usr/share/i18n 目录下 这两个目录在执行localedef -c -v -f GB2312 -i zh_CN zh_CN.gb2312 --prefix=/usr
时将发挥作用。