Linux和Windows平台文件编码问题
2016-11-24 21:03
274 查看
今天在工作中遇到一个问题是“θ”字符没办法在Linux中正常显示,而在Windows平台中可以显示,由于软件必须支持win和Linux双平台,故需要解决这个问题。
在寻找BUG原因的过程中我发现原因就是Linux的文件编码格式和windows是不一样的,在Windows中编写的cpp源文件使用的是GBK2312编码格式,而在Linux中编写的cpp文件格式则为unicode,所以在windows平台编写的非英文字符在Linux下显示为乱码。
上网查询后发现有以下几种解决方案:
修改Linux的默认编码为GBK
方法1:
vi /etc/sysconfig/i18n
默认环境变量LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
修改为:
LANG="zh_CN.GBK"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
方法2:
vi /etc/profile
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"
大家可以看出来这种方法修改了Linux的本地环境变量,使得支持GBK的编码,但是我们的程序是需要发布的,不允许也不能直接修改用户本地的编码方式,所以在这种方法是不可取的。
好了,不卖关子了,我最后的解决办法是使用了Qt中的QChar类型,这种类对象可以使用Unicode码直接初始化为对应字符
例如:Qchar c(0xFFF);
这样就不需要使用输入法来输入字符,而且只要支持Unicode的平台都可以显示该字符。
在寻找BUG原因的过程中我发现原因就是Linux的文件编码格式和windows是不一样的,在Windows中编写的cpp源文件使用的是GBK2312编码格式,而在Linux中编写的cpp文件格式则为unicode,所以在windows平台编写的非英文字符在Linux下显示为乱码。
上网查询后发现有以下几种解决方案:
修改Linux的默认编码为GBK
方法1:
vi /etc/sysconfig/i18n
默认环境变量LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
修改为:
LANG="zh_CN.GBK"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
方法2:
vi /etc/profile
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"
大家可以看出来这种方法修改了Linux的本地环境变量,使得支持GBK的编码,但是我们的程序是需要发布的,不允许也不能直接修改用户本地的编码方式,所以在这种方法是不可取的。
好了,不卖关子了,我最后的解决办法是使用了Qt中的QChar类型,这种类对象可以使用Unicode码直接初始化为对应字符
例如:Qchar c(0xFFF);
这样就不需要使用输入法来输入字符,而且只要支持Unicode的平台都可以显示该字符。
相关文章推荐
- linux 与 windows 文件编码问题
- shell 脚本文件Windows传到Linux后编码问题
- windows下的脚本文件(*.sh)转到linux下编码格式问题
- 注意windows和linux下文件编码问题!
- PHP乱码问题,UTF-8乱码常见问题小结 linux-windows 文件编码乱码问题
- Windows与VMware下Linux的文件共享问题
- 用samba创建linux,windows文件共享区,不能保存的问题
- linux和windows系统互拷文件乱码问题
- volcanol_Linux_问题汇总系列_2_如何在linux和windows主机之间共享文件
- shell文件从windows上传到Linux问题
- linux windows vim的文件编码
- linux和windows双系统互拷文件乱码问题
- Openh323和Windows平台上关于G.723.1编码需要注意的一个问题
- linux下打开windows txt文件中文乱码问题
- windows下压缩的文件在linux下解压后中文乱码问题
- Windows和Linux下文件格式的问题
- Windows环境下编译linux文件遇到的问题
- 解决linux下挂载windows的FAT32格式文件系统乱码问题
- Linux文本文件内容编码问题
- 俺的gVim配置文件(解决了菜单栏,右键菜单和提示框中文乱码问题)(for windows,linux下应该也没问题)