linux内核支持utf8,Linux对非UTF-8中文编码的支持
背景
Linux系統默認采用的UTF-8的編碼(Unicode編碼的一種),包括系統中的中英文和特殊字符,都是默認采用UTF-8編碼。
而在國內,針對中文(包括基本的漢字、各少數民族文字、特殊字符等),有自己的編碼標準(也稱字符集),從前是GBK,到后來的GB18030-2000,現在是GB18030-2005,具體的編碼原理機制和區別這里不展開,網上相關資料很多。
在國內的一些特殊行業中,對操作系統中使用的中文編碼有嚴格的要求,如果使用Linux系統的話,就要求Linux能支持特定的編碼,比如GBK和GB18030。
那么Linux是否支持UTF-8之外的其他字符集呢?
如何才能支持
從桌面OS的角度看,支持指定字符集,需要從幾個層面支持:
內核。最底層的支持。
C庫。基礎庫和API支持,提供各種編碼之間的轉換接口。
圖形庫支持。在基礎圖形庫的層面,提供相關的API接口。其他圖形程序基于這些接口提供相關字符集支持。
桌面環境支持。圖形桌面環境能處理相關字符集(基于相關圖形庫接口)。
字體庫的支持。需要提供支持相應字符集的字體庫。
現狀
Linux主流發行版目前應該都是支持非UTF-8編碼的,OS在上述4個層面都提供了基礎的支持。但針對具體的字符集,支持程度還是有所不同,比如針對GB18030-2005字符集,目前絕大部分的Linux系統(包括Windows系統)都不能完美支持,主要問題孩子字體庫方面,會存在少數字符亂碼的情況。在不追求完美的情況下,還是能用的。
如果需要使用非UTF-8中文編碼,需要進行手工配置,通常的發行版都沒有提供相應的配置工具,需要手工修改配置。具體配置方法見后面小節。
另一方面,對于圖形環境來說,情況相對更糟糕一些,如果要在某發行版中設置非UTF-8的中文編碼,在進行了相應配置后,在圖形環境中,使用起來通常還會遇到各種各樣的問題,比如亂碼、文件(夾)打不開等。這些問題基本都是因為圖形環境中文件管理器對非UTF-8編碼支持不好導致,關鍵還在 文件管理器 ,底層的圖形庫,比如GTK,基本都提供了完善的支持,只是上層應用(文件管理器)未能完美使用。
文件管理修改
根據驗證,目前redhat系使用的主流的文件管理器,如nautilus和caja都不能完美支持非Utf-8編碼,即使按后續章節方法進行完整配置后,在文件管理器中也會出現亂碼,主要集中在左側的places sidebar中對于special dirs的顯示。
解決方法也很簡單,修改相關部分代碼,在顯示之前進行編碼轉換即可。
Redhat 7配置方法
配置系統全局字符集
系統全局的字符集,本質上就是LANG或LC_ALL環境變量,該環境變量包含兩部分內容:
系統語言
相應的字符集
典型設置如:LANG=zh_CN.UTF-8,即中文+UTF-8字符集,如果需要設置成GBK編碼,則需要設置為:LANG=zh_CN.GBK
但是,具體在哪兒設置呢?不同的發行版,配置方法不一樣,Redhat7中相應的配置文件為:/etc/locale.conf,在其中寫入如下內容即可。
LANG=“zh_CN.GBK”
設置后,需重啟生效。
配置文件管理器文件名字符集
文件管理器,如redhat默認使用的nautilus,即圖形環境中管理文件的圖形工具,也叫文件資源瀏覽器,常規理解即點擊“我的電腦”后運行的程序。
文件管理器中可以進行文件(夾)創建、移動、重命名等操作,這些操作后的最終生成的文件名使用的編碼,都依賴于文件管理器自身對字符集的支持。
nautilus對不同的字符集提供的比較完整的支持(確切的說應該是GTK提供了完整的支持),并提供了相應的配置框架,具體來說,只需要設置G_FILENAME_ENCODING=環境變量即可,比如要使用GBK編碼,只需將其設置為:
G_FILENAME_ENCODING="GBK"
對于不同的發行版,設置的位置也不同,取決于使用的登錄管理器,redhat7默認使用GDM作為登錄管理器,只需要在/etc/gdm/Xsession腳本的前面位置(第一有效代碼行,不包括注釋和#!/bin/bash行)加入如下行即可:
export G_FILENAME_ENCODING="GBK"
配置主目錄special dirs使用的字符集
默認情況下,每個用戶的主目錄(/home//)中都會默認創建幾個special目錄,比如“圖片”“視頻”“下載”之類的,在redhat7中這些目錄是在用戶第一次登錄時,通過xdg-user-dirs組件創建的,這些目錄的創建也涉及字符集問題,而xdg-user-dirs組件也提供了相應的配置選項,具體來說,只需要修改/etc/xdg/user-dirs.conf文件中的 **filename_encoding** 配置項即可。以GBK編碼為例,修改后的配置文件內容示例如下:用戶名>
enabled=True
filename_encoding=GBK
配置終端使用的字符集
在Redhat 7圖形環境中,默認打開的終端使用的默認字符集為UTF-8,如果設置為其它編碼,則需要修改相應的設置,設置步驟為:
選擇終端菜單:
“終端-》設定字符編碼-》添加或刪除…
在彈出的對話框列表中選擇新編碼(如GBK),選添加。
重新選擇終端菜單:
“終端-》設定字符編碼-》新添加的編碼
處理已有的UTF-8編碼的內容
對于已經在UTF-8編碼環境中創建的文件(夾),比如安裝完成啟動后,再修改系統的字符集為非UTF-8,此時如果已經通過圖形環境登錄過系統,這主目錄中會自動通過xdg-user-dirs組件創建相應的special目錄,并同時創建~/.config/user-dirs.dirs配置,這些目錄和配置默認是UTF-8編碼,這些目錄會在系統字符集修改為非UTF-8字符集后,顯示成亂碼,如果要解決這個問題,有兩種方式:
在安裝完成后首次啟動后,進入文本界面,在其中完成上述的所有配置(終端配置除外),然后重啟。即在xdg-user-dirs組件創建目錄之前完成字符集的設置。
對于已經創建了UTF-8編碼的文件(夾)時,可以通過convmv工具進行編碼轉換:(使用convmv工具前,需要先安裝相應組件)
yum install -y convmv
convmv -f utf-8 -t gbk –notest
另外,需要刪除已有的user-dirs.dirs配置(針對在修改字符集之前登錄過的用戶):
rm -f ~/.config/user-dirs.dirs
總結
以上是生活随笔為你收集整理的linux内核支持utf8,Linux对非UTF-8中文编码的支持的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核irq,linux-ker
- 下一篇: linux装完windows时间长,重装