java+linux的中文環境問題的排查__linux

來源:互聯網
上載者:User


接手了一個新工程,碰到一個問題,就是使用java的File.listFiles 方法擷取路徑下的檔案,問題是:擷取的中文檔案名稱是亂碼。。。體現出來的癥狀是通過java的File API找不到檔案。


最初就懷疑是環境問題,第一步排查環境變數:

# linux 的 proc 中匯出環境變數
cat  /proc/10643/environ| tr '\0' '\n'


註:自己替換一下進程ID


發現沒LANG,就給配置加上了:

export LANG="en_US.UTF-8"


但是重啟進程之後問題依舊。


接下來,翻看了java的File類的實現,發現是通過FileSystem對應的native方法實現的,這部分是C的代碼,接下來就懷疑是"LC_XXX"的環境變數的幹擾。


基於這個想法,接著加上了環境變數:

export LC_ALL="en_US.UTF-8"


重啟之後,問題消失。


總結:

估計是啟動進程的某個環節,引入了LC_XXX的某個配置,導致C的語言環境配置被變更,使擷取的檔案名稱的編碼和預期不一致。解決方案比較粗暴,通過LC_ALL覆蓋所有的配置。


附:

java 配置中文環境
-Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en

export LC_ALL="en_US.UTF-8" export LANG="en_US.UTF-8"



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.