天天看點

linux環境下 java nio 檔案名 亂碼 utf-8 gbk

這個事情一下困擾了好幾天,今天終于解決了。做個記錄

事情的原因為在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重新開機了之後。才生效的。

我的天啊,花了兩天的時間呢。