本文目錄一覽:
windows下python的bom問題
問題:
windows環境下新建或編輯文本文件,保存時會在頭部加上BOM。
使用ftp上傳到linux下,在執行時第一行即報錯。
以下方法可以去除BOM頭,有需要的朋友可以參考下。
複製代碼代碼如下:
import codecs
data = open(“Test.txt”).read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode(“utf-8”)
說明: 文件開始部為 0xEF 0xBB 0xBF 為BOM
python帶bom的utf-8-sig如何去掉bom
在此列舉以下兩種去除方法:
(1)在notepad++等高級記事本中可以直接轉換為無BOM格式的utf-8文件
(2)用python腳本解決
BOM時一串16進位字元串,在python中表示為 「b’\xef\xbb\xbf’」
如果在分詞之後出現BOM字元串,可以判斷詞是否等於「b’\xef\xbb\xbf’」去除即可
去除文本文件中BOM頭的腳本
#65279;#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def removeBom(file):
”’移除UTF-8文件的BOM位元組”’
BOM = b’\xef\xbb\xbf’
existBom = lambda s: True if s==BOM else False
f = open(file, ‘rb’)
if existBom( f.read(3) ):
fbody = f.read()
#f.close()
with open(file, ‘wb’) as f:
f.write(fbody)
python解決csv文件用excel打開亂碼問題
【問題】
python輸出的csv文件用excel打開,裡面的中文會變成亂碼,但用window下的記事本或mac下的numbers打開就正常顯示。
原因是python輸出的文件是utf-8編碼寫入的,excel默認以gbk方式讀取,導致亂碼發生。
【解決方法1】文件產出時encoding設置為utf-8-sig
用excel打開csv時,excel會先檢查文件的第一個字元,來了解這個文件是什麼編碼方式,如果這個字元是BOM,excel就知道用utf-8的方式打開這個文件。python自帶了處理BOM的編碼方式uft-8-sig,因此只需要在文件產出時將encoding設置為utf-8-sig。
如果文件不是由python產出的,只需要以utf-8方式讀入再以utf-8-sig方式存儲即可
【解決方法2】懶人法,適用只含簡體中文的文件
用記事本打開,點擊另存為,右下角編碼方式選擇「ANSI」,這個過程是把這個文件改成gbk編碼格式,excel就是默認用gbk方式打開的。
參考: Python寫的csv文件,如何讓 Excel 雙擊打開不亂碼? – 雲+社區 – 騰訊雲
對編碼格式一竅不通的可以閱讀以下網頁
python筆記——二進位和文件編碼_砍柴姑娘Jourosy的博客-CSDN博客
編碼方式之ASCII、ANSI、Unicode概述 – 藍海人 – 博客園
【簡單總結】:
1. 首先需要了解 字符集 和 字元編碼 兩個概念,字符集定義了字元和二進位的一一對應關係,字元編碼規定了如何將字元的編號存儲到計算機中。
2. Unicode是字符集,包含了全球文字的唯一編碼,utf-8是編碼方式,將unicode以某種方式存儲到計算機中。
3. 有些字符集和編碼是結合在一起的,稱作字符集還是編碼都無所謂,比如ASCII,GBK
4. ANSI是各個國家地區不同擴展編碼方式的總稱,互不兼容(可以看出來通用性沒有utf好)
5. 不同編碼方式在轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字元串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/276993.html