本文針對的問題是“ubuntu 安裝中文語言包”“ubuntu server中文問題”,“ubuntu更改語言環境”,“ubuntu locale的設定”,“cannot change locale (zh_cn.utf-8)”,“linux中文亂碼”,“linux字元集的修改”,“linux亂碼的解決辦法”等問題,提供一站式解決。如果系統顯示中文異常,例如出現顯示中文亂碼等,可以參考本文章。關于centos系統的修改辦法,請參考文章末尾的描述。
問題描述
終端顯示中文正常,應用程式裡面顯示中文異常。
錯誤表現
1
<code>$ </code><code>sudo</code> <code>dpkg-reconfigure locales</code>
perl: warning: setting locale failed.
perl: warning: please check that your locale settings:
language = "zh_cn:zh:en_us:en",
lc_all = "zh_cn.utf-8",
lang = "zh_cn.utf-8"
are supported and installed on your system.
perl: warning: falling back to the standard locale ("c").
locale: cannot set lc_ctype to default locale: no such file or directory
locale: cannot set lc_messages to default locale: no such file or directory
locale: cannot set lc_all to default locale: no such file or directory
/bin/bash: warning: setlocale: lc_all: cannot change locale (zh_cn.utf-8)
generating locales...
en_us.utf-8... /usr/sbin/locale-gen: line 177: warning: setlocale: lc_all: cannot change locale (zh_cn.utf-8)
up-to-date
generation complete.
<code>$ </code><code>man</code> <code>locale</code>
man: can't set the locale; make sure $lc_* and $lang are correct
<code>$ locale</code>
lang=zh_cn.utf-8
language=zh_cn:zh:en_us:en
lc_ctype="zh_cn.utf-8"
lc_numeric="zh_cn.utf-8"
lc_time="zh_cn.utf-8"
lc_collate="zh_cn.utf-8"
lc_monetary="zh_cn.utf-8"
lc_messages="zh_cn.utf-8"
lc_paper="zh_cn.utf-8"
lc_name="zh_cn.utf-8"
lc_address="zh_cn.utf-8"
lc_telephone="zh_cn.utf-8"
lc_measurement="zh_cn.utf-8"
lc_identification="zh_cn.utf-8"
lc_all=
<code>$ localectl list-locales</code>
c.utf-8
en_us.utf8
zh_cn.utf8
問題解決辦法
要想達到應用程式中正常顯示中文字元的目的,要下面的三個變量應該如下,
2
3
<code>lang=zh_cn.utf-8 </code>
<code>language=zh_cn:zh:en_us:en </code>
<code>lc_all=lc_all=zh_cn.utf-8</code>
但問題在于“lc_all to default locale: no such file or directory”和“lc_all: cannot change locale (zh_cn.utf-8) ”,是以重新安裝中文語言包。
執行下面指令
<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hans</code>
或
<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hans language-pack-zh-hans-base</code>
如果想支援繁體字,則執行
<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hant</code>
<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hant language-pack-zh-hant-base</code>
再執行locale指令設定目前locale環境
<code>locale</code>
相關的檔案和參考
相關手冊:man locale(1), locale(5), locale(7)
相關檔案:/usr/share/i18n/supported
相關指令:
locale --all-locales 列出目前系統中所有支援的locale
localectl list-locales 列出目前系統中所有可用的locale
localectl set-locales locale... 修改目前系統中的locale,與locale功能相同,與export上文提到的三個變量相同
對于centos,可以直接編輯/etc/sysconfig/i18n檔案,将lang="en_us.utf-8"設定成lang="zh_cn.utf-8",除此之外,centos下locale指令的顯示結果如下:
<code># locale</code>
lang=en_us.utf-8
lc_ctype="en_us.utf-8"
lc_numeric="en_us.utf-8"
lc_time="en_us.utf-8"
lc_collate="en_us.utf-8"
lc_monetary="en_us.utf-8"
lc_messages="en_us.utf-8"
lc_paper="en_us.utf-8"
lc_name="en_us.utf-8"
lc_address="en_us.utf-8"
lc_telephone="en_us.utf-8"
lc_measurement="en_us.utf-8"
lc_identification="en_us.utf-8"
其中,lc_all=為空,但并不是表示這裡不對,而是lc_all=實際上等于lc_collate、lc_ctype、lc_monetary、lc_messages、lc_numeric、lc_time,參見locale(7)。