这个问题困扰了我们很久,就是在Linux下,我们通过网页执行用Java写的小工具时,发现,在终端可以正确执行,而用网页执行却不能正确执行!中文总是出现乱码。
通过输出文件的编码,发现文件的格式都是:ANSI_X3.4-1968。这很明显不对,正常的应该是UTF-8 。
一开始,我们都以为是Java编码出了错,但是,为什么终端执行正确,而网页执行却是错的呢?
很明显,能过了Apache这个中介才发生了错误。于是猛地搜这个apache jvm ANSI_X3.4-1968,找到了这篇文章 :http://stackoverflow.com/questions/4398540/unicodeencodeerror-when-saving-imagefield-containing-non-ascii-characters-in-dja
在apache启动的时候,apache的整个运行环境并没有设置为 LANG="en_US.UTF-8" ,
所以,我在apache的启动函数(/etc/init.d/httpd文件或者是/etc/init.d/apache2/envvars文件)里面加了
1 start() 2 { 3 export LC_ALL='en_US.UTF-8' #...省略n万行原来的代码 4 }
仔细想想,这个问题和我之前遇到的Git不能提交的问题有点像。因为更改了apache的默认运行用户,导致git用户无法读取自己的.config文件,所以提交不了。
同样,这样也可能是git用户无法读取自己的.bashprofile文件,所以,即使我们如何设置.bashprofile里面的编码,都无法改变apache的运行环境。
同样的做法,在系统运行的时候动态地添加这些环境变量。问题得到暂时的解决...