linux查看文件的編碼格式的方法 set fileencoding
亂碼原因:
因為你的文件聲明為utf-8,並且也應該是用utf-8的編碼保存的源文件。但是windows的本地默認編碼是cp936,也就是gbk編碼,所以在控制台
直接打印utf-8的字符串當然是亂碼了。
解決方法:
在控制台打印的地方用一個轉碼就ok了,打印的時候這么寫:
print myname.decode('UTF-8').encode('GBK')
比較通用的方法應該是:
import sys
type = sys.getfilesystemencoding()
print myname.decode('UTF-8').encode(type)
最近利用python抓取一些網上的數據,遇到了編碼的問題。非常頭痛,總結一下用到的解決方案。
- linux中vim下查看文件編碼的命令 set fileencoding
- python中一個強力的編碼檢測包 chardet ,使用方法非常簡單。linux下利用pip install chardet實現簡單安裝
1
2
3
4
|
import
chardet
f
=
open
(
'file'
,
'r'
)
fencoding
=
chardet.detect(f.read())
print
fencoding
|
fencoding輸出格式 {'confidence': 0.96630842899499614, 'encoding': 'GB2312'} ,只能判斷是否為某種編碼的概率。比較准確的結果了。輸入參數為str類型。
- 了解python中str的編碼后可以利用decode和encode來實現編碼的轉換。
一般流程是str利用decode方法根據str的編碼將其解碼為unicode字符串類型,然后利用encode根據特定的編碼將unicode字符串類型轉換為特定的編碼。python中str和unicode屬於兩種不同的類型,如下。
- 一般情況下window默認編碼gbk,linux默認編碼utf8
- python編程中 系統編碼,python編碼,文件編碼 的概念。
系統編碼:默認寫源碼的編輯器的編碼方式。它代表源碼文件內的所有內容都是根據詞方式編碼成二進制碼流。存入到磁盤中的。linux下通過locale命令查看。
python編碼:指python內設置的解碼方式。如果不設定的話,python默認的是ascii解碼方式。如果python源代碼文件中不出現中文的話,這個地方怎么設定應該不會問題。
設定方法:在源碼文件開頭(一定是第一行):#-*-coding:UTF-8-*-,源碼文件的設置解碼方式是UTF-8 或者
1
2
3
|
import
sys
reload
(sys)
sys.setdefaultencoding(
'UTF-8'
)
|
文件編碼:文本的編碼方式,linux下vim利用set fileencoding查看。
- 一般情況下輸出亂碼的原因就是 沒有按照系統解碼的方式進行編碼。
比如print s, s類型為str,linux系統下系統默認編碼為utf8編碼,s在輸出前就應該編碼為utf8。如果s為gbk編碼就應該這樣輸出。print s.decode('gbk').encode('utf8')才能輸出中文。
window下面情況相同,window默認編碼為gbk編碼,所以s輸出前必須編碼為gbk。
- python處理中一般處理unicode類型。這樣輸出前直接編碼即可。
原文:https://www.cnblogs.com/klb561/p/11241664.html
linux查看文件的編碼格式的方法 set fileencoding
查看文件編碼
在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)編碼打開。
2. enca (如果你的系統中沒有安裝這個命令,可以用sudo yum install -y enca 安裝 )查看文件編碼
$ enca filename
filename: Universal transformation format 8 bits; UTF-8
CRLF line terminators
需要說明一點的是,enca對某些GBK編碼的文件識別的不是很好,識別時會出現:
Unrecognized encoding
文件編碼轉換
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
本文地址:http://www.yaronspace.cn/blog/index.php/archives/523
亂碼原因:
因為你的文件聲明為utf-8,並且也應該是用utf-8的編碼保存的源文件。但是windows的本地默認編碼是cp936,也就是gbk編碼,所以在控制台
直接打印utf-8的字符串當然是亂碼了。
解決方法:
在控制台打印的地方用一個轉碼就ok了,打印的時候這么寫:
print myname.decode('UTF-8').encode('GBK')
比較通用的方法應該是:
import sys
type = sys.getfilesystemencoding()
print myname.decode('UTF-8').encode(type)
最近利用python抓取一些網上的數據,遇到了編碼的問題。非常頭痛,總結一下用到的解決方案。
- linux中vim下查看文件編碼的命令 set fileencoding
- python中一個強力的編碼檢測包 chardet ,使用方法非常簡單。linux下利用pip install chardet實現簡單安裝
1
2
3
4
|
import
chardet
f
=
open
(
'file'
,
'r'
)
fencoding
=
chardet.detect(f.read())
print
fencoding
|
fencoding輸出格式 {'confidence': 0.96630842899499614, 'encoding': 'GB2312'} ,只能判斷是否為某種編碼的概率。比較准確的結果了。輸入參數為str類型。
- 了解python中str的編碼后可以利用decode和encode來實現編碼的轉換。
一般流程是str利用decode方法根據str的編碼將其解碼為unicode字符串類型,然后利用encode根據特定的編碼將unicode字符串類型轉換為特定的編碼。python中str和unicode屬於兩種不同的類型,如下。
- 一般情況下window默認編碼gbk,linux默認編碼utf8
- python編程中 系統編碼,python編碼,文件編碼 的概念。
系統編碼:默認寫源碼的編輯器的編碼方式。它代表源碼文件內的所有內容都是根據詞方式編碼成二進制碼流。存入到磁盤中的。linux下通過locale命令查看。
python編碼:指python內設置的解碼方式。如果不設定的話,python默認的是ascii解碼方式。如果python源代碼文件中不出現中文的話,這個地方怎么設定應該不會問題。
設定方法:在源碼文件開頭(一定是第一行):#-*-coding:UTF-8-*-,源碼文件的設置解碼方式是UTF-8 或者
1
2
3
|
import
sys
reload
(sys)
sys.setdefaultencoding(
'UTF-8'
)
|
文件編碼:文本的編碼方式,linux下vim利用set fileencoding查看。
- 一般情況下輸出亂碼的原因就是 沒有按照系統解碼的方式進行編碼。
比如print s, s類型為str,linux系統下系統默認編碼為utf8編碼,s在輸出前就應該編碼為utf8。如果s為gbk編碼就應該這樣輸出。print s.decode('gbk').encode('utf8')才能輸出中文。
window下面情況相同,window默認編碼為gbk編碼,所以s輸出前必須編碼為gbk。
- python處理中一般處理unicode類型。這樣輸出前直接編碼即可。
轉1. http://blog.sina.com.cn/s/blog_40e1ba640102wm26.html
2.http://www.cnblogs.com/joeyupdo/archive/2013/03/03/2941737.html
以下為copy鏈接2中的介紹
(1)encoding: Vim 內部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區)、菜單文本、消息文本等。用戶手冊上建議只在 .vimrc 中改變它的值,事實上似乎也只有在 .vimrc 中改變它的值才有意義
(2)fileencoding: Vim 中當前編輯的文件的字符編碼方式,Vim 保存文件時也會將文件保存為這種字符編碼方式 (不管是否新文件都如此),網上是這樣介紹的,但是我這樣做在.vimrc中定義為utf-8似乎沒有作用,只能在打開vim文件時手動設置才會起效,不知道什么原因。
(3)fileencodings: Vim 啟動時會按照它所列出的字符編碼方式逐一探測即將打開的文件的字符編碼方式,並且將 fileencoding 設置為最終探測到的字符編碼方式。因此最好將 Unicode 編碼方式放到這個列表的最前面,將拉丁語系編碼方式 latin1 放到最后面。
(4)termencoding: Vim 所工作的終端 (或者 Windows 的 Console 窗口) 的字符編碼方式。這個選項在 Windows 下對我們常用的 GUI 模式的 gVim 無效,而對 Console 模式的 Vim 而言就是 Windows 控制台的代碼頁,並且通常我們不需要改變它。
系統locale是utf-8(很多linux系統默認的locale形式),編輯的文檔是GB2312或GBK形式的(Windows記事本
默認保存形式,大部分編輯器也默認保存為這個形式,所以最常見),終端類型utf-8(也就是假定客戶端是putty類的unicode軟件)
則vim打開文檔后,encoding=utf-8(locale決定的),fileencoding=latin1(自動編碼判斷機制不准導致的),termencoding=空(默認無需轉換term編碼),顯示文件為亂碼。
解決方案1:首先要修正fileencoding為cp936或者euc-cn(二者一樣的,只不過叫法不同),注意修正的方法不是:set
fileencoding=cp936,這只是將文件保存為cp936,正確的方法是重新以cp936的編碼方式加載文件為:edit
++enc=cp936,可以簡寫為:e ++enc=cp936。
但是這樣做,文件關閉后重新打開又要重新設置一遍。出現亂碼歸根結底的原因是vim不能識別該文件的編碼方式,導致不能正常解碼(不知道是不是叫解碼,我的理解)。所以,我在.vimrc中設置了fileencodings,相當於告訴vim當以utf-8解碼文件不成功時以這么幾種方式嘗試,set fileencoding=utf-8 set fileencodings=ucs-bom,utf-8,cp936,latin1. 這樣打開正常了
原文:https://www.cnblogs.com/klb561/p/11241664.html