這個問題困擾了我們很久,就是在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的運行環境。
同樣的做法,在系統運行的時候動態地添加這些環境變量。問題得到暫時的解決...