Python讀取UTF-8編碼文件並使用命令行執行時輸出結果的問題


最近參加了由CCF舉辦的數據挖掘比賽,主辦方提供了csv格式的數據文件,由於中文顯示亂碼的問題,我先用txt文本編輯器將編碼改為utf-8格式,但是在讀取文件並輸出讀取結果時發生了問題,代碼如下:

 1 # -*- coding:utf-8 -*-
 2 __author__ = 'Jz'
 3 
 4 csvPath = 'D:/coding_file/python_file/Big Data/trainUTF8.csv'
 5 try:
 6     csv = open(csvPath, 'r')
 7     lines = csv.readlines()
 8     for line in lines:
 9         print line.decode('utf-8').encode('GBK')
10 except IOError, ioe:
11     if hasattr(e, 'reason'):
12         print '文件打開失敗,失敗原因:' + e.reason

運行結果如下:

顯然根據結果來看問題具體出現在print line.decode('utf-8').encode('GBK')這里,按理說應該是沒有問題的,那么問題到底出現在哪里?

后來搜索了很多相關資料,解決了問題,總結如下:Windows系統的txt文件在使用utf-8編碼保存時會默認在文件開頭插入三個不可見字符,稱為BOM頭,這個BOM頭在python的codecs庫中已經定義為常量。Windows根據BOM頭來判斷txt文件是否為utf-8編碼,所以在讀取文件時必須將BOM頭去除或者忽略,否則python在decode和encode時會出現錯誤。

解決方法:

 1 # -*- coding:utf-8 -*-
 2 __author__ = 'Jz'
 3 
 4 import codecs
 5 
 6 csvPath = 'D:/coding_file/python_file/Big Data/trainUTF8.csv'
 7 try:
 8     csv = open(csvPath, 'r')
 9     lines = csv.readlines()
10     for line in lines:
11         print line.decode('utf-8').encode('gbk', 'ignore')
12 except IOError, ioe:
13     if hasattr(e, 'reason'):
14         print '文件打開失敗,失敗原因:' + e.reason

ignore參數表示忽略其中有異常的編碼,僅顯示有效的編碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM