linux下經常遇到的編碼問題如果你需要在Linux中操作windows下的文件,那麼你可能會經常遇到文件編碼轉換的問題。Windows中默認的文件格式是GBK(gb2312),而Linux一般都是UTF-8。
查看編碼的方法
方法一:file filename
方法二:在Vim中可以直接查看文件編碼
:set fileencoding
如果你只是想查看其它編碼格式的文件或者想解決用Vim查看文件亂碼的問題,那麼你可以在
~/.vimrc 文件中添加以下內容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
這樣,就可以讓vim自動識別文件編碼(可以自動識別UTF-8或者GBK編碼的文件),其實就是依照fileencodings提供的編碼列表嘗試,如果沒有找到合適的編碼,就用latin-1(ASCII)編碼打開
文件編碼轉換
多方法:
iconv 提供標準的程序和API來進行編碼轉換;
convert_encoding.py 基於Python的文本文件轉換工具;
decodeh.py 提供演算法和模塊來談測字元的編碼;
linux下文件編碼轉換:
方法一:
在Vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式
:set fileencoding=utf-8
或者
11)設置文件集合,即要對哪些文件進行操作,可以使用通配符,比如我通常是對 C/C++ 源程序進行編碼轉換
:args *.h *.cpp
2)給出要在每個文件上執行的命令,這里是轉換編碼:
:argdo set fenc=utf-8 | update
方法二:
iconv 轉換
5.案例:
假如說我們將windows下的一個UTF-8的文件傳到linux環境下,linux環境下的系統編碼是GB18030,我們cat的時候就會出現亂碼,這個時候就應該想到轉碼了,下面我們來進行試驗:
我們將windows下一個名為UTF-8.sh的文件傳到linux系統中,其中UTF-8.sh的內容如下:
我是中文編碼UTF-8模式~
而linux系統的系統語言設置為:
[root@sor-sys zy]# cat /etc/sysconfig/i18n
LANG=zh_CN.GB18030
SYSFONT="latarcyrheb-sun16"
這個時候查看一下文件的內容及編碼:
[root@sor-sys zy]# file UTF-8.sh
UTF-8.sh: UTF-8 Unicode text, with no line terminators
[root@sor-sys zy]# cat UTF-8.sh
鍩挎垜鏄?腑鏂囩紪鐮乁TF-8妯″紡~[root@sor-sys zy]#
[root@sor-sys zy]#
這個時候我們就需要轉換編碼了,記得使用iconv
[root@sor-sys zy]# iconv -f UTF-8 -t GB18030 UTF-8.sh -o GB18030.sh
[root@sor-sys zy]# cat GB18030.sh
??我是中文編碼UTF-8模式~[root@sor-sys zy]#
[root@sor-sys zy]# file GB18030.sh
GB18030.sh: Non-ISO extended-ASCII text, with no line terminators
[root@sor-sys zy]#
convmv就是更改文件名編碼方式的一個工具。
比如
sudo convmv -f gbk -t utf-8 -r –notest /home
就是將/home目錄下原來文件名是gbk編碼方式的全部改為utf-8格式的。這里 -f 後面為原來的編碼方式,-t 後面是要更改為的編碼方式, -r 表示這個目錄下面的所有文件, –notest 表示馬上執行,而不是僅僅測試而已。另外這命令好像要root才能執行,因此要加上 sudo。
❷ Linux中如何查看文件編碼及對文件進行編碼轉換
查看文件編碼
在Linux中查看文件編碼可以通過以下幾種方式:
1.在Vim中可以直接查看文件編碼
:set fileencoding
即可顯示文件編碼格式。
如果你只是想查看其它編碼格式的文件或者想解決用Vim查看文件亂碼的問題,那麼你可以在
~/.vimrc 文件中添加以下內容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
這樣,就可以讓vim自動識別文件編碼(可以自動識別UTF-8或者GBK編碼的文件),其實就是依照fileencodings提供的編碼列表嘗試,如果沒有找到合適的編碼,就用latin-1(ASCII)編碼打開。
文件編碼轉換
1.在Vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式
:set fileencoding=utf-8
2. iconv 轉換,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如將一個UTF-8 編碼的文件轉換成GBK編碼
iconv -f GBK -t UTF-8 file1 -o file2
iconv -f gbk -t utf8 linux常用命令.txt > linux常用命令.txt.utf8
文件名編碼轉換:
從Linux 往 windows拷貝文件或者從windows往Linux拷貝文件,有時會出現中文文件名亂碼的情況,出現這種問題的原因是因為,windows的文件名 中文編碼默認為GBK,而Linux中默認文件名編碼為UTF8,由於編碼不一致,所以導致了文件名亂碼的問題,解決這個問題需要對文件名進行轉碼。
在Linux中專門提供了一種工具convmv進行文件名編碼的轉換,可以將文件名從GBK轉換成UTF-8編碼,或者從UTF-8轉換到GBK。
首先看一下你的系統上是否安裝了convmv,如果沒安裝的話用:
yum -y install convmv
安裝。
下面看一下convmv的具體用法:
convmv -f 源編碼 -t 新編碼 [選項] 文件名
常用參數:
-r 遞歸處理子文件夾
--notest 真正進行操作,請注意在默認情況下是不對文件進行真實操作的,而只是試驗。
--list 顯示所有支持的編碼
--unescap 可以做一下轉義,比如把%20變成空格
比如我們有一個utf8編碼的文件名,轉換成GBK編碼,命令如下:
convmv -f UTF-8 -t GBK --notest utf8編碼的文件名
這樣轉換以後"utf8編碼的文件名"會被轉換成GBK編碼(只是文件名編碼的轉換,文件內容不會發生變化)
❸ linux 下 中文 gbk 轉 utf-8
我試了說的情況,沒有報錯啊,在windows下使用文本編輯器輸入喆,字元專編碼格式為GBK,並且跟其它屬漢字混合在一起,傳到linux上由於我的環境是utf-8的,所以是亂碼,然後運行
iconv -f GBK -t UTF-8 源文件 -o目標文件
打開目標文件,顯示一切正常了
備註:我的linux環境是suse linux enterprise server 11 sp3(x86_64)
❹ 在linux中每次打開一個終端,終端的默認編碼為 utf-8,如何設置為讓他每次打開編碼為GBK
修改 i18n 這個文件。
一般系統默認在/etc/sysconfig/ 這個目錄下
❺ linux下怎麼改變文件的編碼格式
1.在Vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式
:set fileencoding=utf-8
2. enconv 轉換文件編碼,比如要將一個GBK編碼的文件轉換成UTF-8編碼,操作如下
enconv -L zh_CN -x UTF-8 filename
3. iconv 轉換,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如將一個UTF-8 編碼的文件轉換成GBK編碼
iconv -f GBK -t UTF-8 file1 -o file2
查看文件編碼file命令
file ip.txt ip.txt: UTF-8 Unicode text, with escape sequences
一、利用iconv命令進行編碼轉換文件內容編碼轉換 iconv命令用於轉換指定文件的編碼,默認輸出到標准輸出設備,亦可指定輸出文件。 用法: iconv [選項...] [文件...] 有如下選項可用: 輸入/輸出格式規范: -f, --from-code=名稱 原始文本編碼 -t, --to-code=名稱 輸出編碼 信息: -l, --list 列舉所有已知的字元集 輸出控制: -c 從輸出中忽略無效的字元 -o, --output=FILE 輸出文件 -s, --silent 關閉警告 --verbose 列印進度信息 -?, --help 給出該系統求助列表 --usage 給出簡要的用法信息 -V, --version 列印程序版本號 例子: iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt 這個命令讀取aaa.txt文件,從utf-8編碼轉換為gb2312編碼,其輸出定向到bbb.txt文件。
❻ 關於linux下打開windows文本文件亂碼的問題
掛載Windows分區 1. 手工掛載 在Linux中也可以讀取Windows分區,包括fat32格式的和ntfs格式的。首先你得知道Linux下對硬碟分區的稱呼。比如Windows下的C盤通常是hda1,D盤是hda5,E盤是hda6,等等。詳細情形請看相關文檔。 要掛載Windows分區,首先得確定你所用的Linux系統的locale(這個locale包括了系統使用的語言和字元的編碼等信息)。中文Linux 常用的locale是zh_CN.gb2312,zh_CN.gbk,zh_CN.gb18030 和 zh_CN.UTF-8 。 在默認安裝中,Debian Linux和Mandriva Linux的locale是zh_CN.gb2312,而Ubuntu Linux和Fedora Linux的locale是zh_CN.UTF-8 。最好不要隨便更改locale,否則會出現很多亂碼的情形。要查看系統的locale,可以在終端下輸入下面的命令查看: echo $LANG 其次,你得知道你的windows分區的格式,這個在windows的分區的屬性中可以看到,一般是fat32和ntfs格式的。 假設你的locale是zh_CN.UTF-8,要掛載一個/dev/hda1的fat32格式的windows分區到/mnt/C目錄(若這個目錄不存在手工新建一個),可以在終端下輸入以下命令(在Ubuntu里還需要在這行命令前加上sudo): mount -t vfat /dev/hda1 /mnt/C -o iocharset=utf8 如果你的locale不是zh_CN.UTF-8,把上面命令的utf8改為gb2312;如果這個windows分區是ntfs格式的,將上面命令的vfat改為ntfs。 這樣掛載的ntfs格式的分區,只有root能讀取,如果需要讓普通用戶也能讀取,需要再加上umask=022選項,如下: mount -t ntfs /dev/hda1 /mnt/C -o iocharset=utf8,umask=022 類似地,如果要讓掛載的分區允許所有用戶讀取和修改,可以將上面的umask=022,改為umask=0就可以了。 卸載分區就簡單多了: umount /dev/hda1 有時候卸載分區時提示分區繁忙(device is busy),可以先用下面的命令看看哪個進程在使用此分區: fuser -cu /dev/hda1 假如屏幕的輸出為 /dev/hda1: 8463m(cck) 則可以用此命令看這個進程對應的程序名字: ps 8463 然後可以用此命令結束此進程: kill -9 8463 這樣就可以正常卸載分區了。 2. 自動掛載 要讓Linux系統啟動時自動掛載windows分區,可以把上述的命令寫入 /etc/fstab 文件中,下面是一個例子: # /etc/fstab: static file system information. # #[file system] [mount point] [type] [options] [mp] [pass] proc /proc proc defaults 0 0 /dev/hda9 / ext3 defaults 0 1 /dev/hda13 none swap sw 0 0 /dev/hdc /media/cdrom iso9660 ro,user,noauto 0 0 /dev/fd0 /media/floppy auto rw,user,noauto 0 0 /dev/hda10 /mnt/debian ext3 defaults 0 0 /dev/hda1 /mnt/C ntfs utf8,umask=022 0 0 /dev/hda5 /mnt/D vfat utf8,umask=0 0 0
❼ 如何解決 linux 的亂碼問題
出現這種情況的原因為兩種操作系統的中文壓縮方式不同,在windows環境中中文壓縮一般為gbk,而在linux環境中為utf8,這就導致了在windows下能正常顯示
txt文件在linux環境下打開呈現了亂碼狀態。
解決方法:在linux用iconv命令,輸入命令如下
iconv -f gbk -t utf8 file.pdf > file.pdf.utf8
此時會重生一file.utf8文件,打開之後就能正常顯示中文
linux系統下修改語言配置方法有:
法一:修改/etc/profile文件,增加export LANG=zh_CN.GB18030
法二:修改/etc/sysconfig/i18n文件,將
#LANG="en_US.UTF-8"
#SUPPORTED="en_US.UTF-8:en_US:en"
#SYSFONT="latarcyrheb-sun16"
改為
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN:zh:en_US.UTF-8:en_US:en:zh_CN.GB18030"
SYSFONT="latarcyrheb-sun16"
/etc/profile: 為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.
/etc/sysconfig/i18n 這里存放的是系統的區域語言設置
LANG 表明你當前系統的語言環境變數設置 ,這里是 zh_CN.GB18030
SUPPORTED 表明系統預置了那些語言支持 ,不在項目中的語言不能正常顯示
SYSFONT 定義控制台終端字體,你文本登錄的時候顯示的字體是 latarcyrheb-sun16
I18N 是 internationalization 的縮寫形式,意即在 i 和 n 之間有 18 個字母,本意是指軟體的「國際化」.I18N支持多種語言,不過同一時間只能是英文和一種選定的語言,例如英文+中文、英文+德文、英文+韓文等等;
如果在SCRT上操作時中文亂碼,可依次點擊options--session options--appearance,選擇character encoding為UTF-8
❽ linux下文件打開亂碼怎麼辦
如果採用圖形化界面請使用 gnome-open <dir路徑> 打開。 如果依然亂碼請檢查是否安裝了中文字體。 檢查編碼是否為gbk。 互聯網工程師linux團隊提醒您。工程師社區QQ群正式招募。群號:4040533 歡迎大家加入。互聯網工程師是致力成為中國最具影響力的IT技術人才互動交流門戶網站之一,幫助您成為網路工程師、系統工程師、linux專家、windows專家。
❾ linux下打開txt中文文檔為什麼會亂碼
可能有以下幾個原來因:
安裝Linux的時候沒源有安裝中文字型檔。
txt編碼格式是utf-8或者其他格式,但是打開該文檔的編輯器默認編碼格式不是同一種,如使用了ASCII碼。
該文檔已經被加密。
該文檔已經被損壞。
❿ linux中如何使用某種編碼方式讀取一個文本文件
liunx 的文件都是開源的。只要安裝了就會自動關聯。