這個事情一下困擾了好幾天,今天終于解決了。做個記錄
事情的原因為在linux下環境下需要用流輸出一個檔案,其實這是是件很簡單的事情。但麻煩的是輸出的檔案中檔案内容的确被編碼成了GBK,可是檔案名卻一直是utf-8。百思不得其解。也初步調過linux的字元集,确認了的确是GB2312.可是問題還是不能被解決。
回頭還是以為程式的問題,把短的可憐的幾段代碼,反複測試,用byte【】把檔案名都進行了GBK編碼,然後位元組輸出,可是發現沒有用。也試了改tomcat的強制gbk輸出。
其實最後發現的問題,還是在于LINUX的字元集沒有被真正改過來。
首先确認一件事情,我們常用的位元組流編碼,其實隻能對流檔案中的内容進行編碼。
OutputStreamWriter fos = new OutputStreamWriter(new FileOutputStream(path),"GBK"); 很熟悉的代碼 吧,其中PATH,也就是檔案的輸出名稱,是不能被編碼的!!決定這個檔案名編碼是你的作業系統目前編碼格式。
關于字元集:
首先需要确認系統是不是有該字元集包:
/usr/share/i18n/charmaps(目錄)
修改字元編碼配置檔案
# vi /etc/sysconfig/i18n
修改後内容如下:
LANG="zh_CN.GB2312"
SUPPORTED="zh_CN.GB2312:zh_CN:zh:en_US:en"
SYSFONT="latarcyrheb-sun16"
我直接把UTF-8的全去掉了。
接下來就是最重要的,一定要重新開機。不要以為linux不用重新開機,用類似于source這種指令去重應用。沒有用的。。太天真了。
最後還是用 reboot重新開機了之後。才生效的。
我的天啊,花了兩天的時間呢。