python去除\ufeff、\xa0、\u3000 - 碼上快樂

文章推薦指數: 80 %
投票人數:10人

今天使用python處理一個txt文件的時候,遇到幾個特殊字符:\ufeff、\xa0、\u3000,記錄一下處理方法. 代碼: with open(file_path, mode='r') as f: 碼上快樂 首頁 榜單 標簽 關於 搜索 相關內容   簡體   繁體 python去除\ufeff、\xa0、\u3000 本文轉載自   zqifa   查看原文   2018-11-0812:01   7159    python/ 文件 今天使用python處理一個txt文件的時候,遇到幾個特殊字符:\ufeff、\xa0、\u3000,記錄一下處理方法 代碼:withopen(file_path,mode='r')asf:s=f.read() 1.\ufeff字節順序標記 去掉\ufeff,只需改一下編碼就行,把UTF-8編碼改成UTF-8-sigwithopen(file_path,mode='r',encoding='UTF-8-sig')asf:s=f.read() 2.\xa0是不間斷空白符 \xa0是不間斷空白符 我們通常所用的空格是\x20,是在標准ASCII可見字符0x20~0x7e范圍內。

而\xa0屬於latin1(ISO/IEC_8859-1)中的擴展字符集字符,代表空白符nbsp(non-breakingspace)。

latin1字符集向下兼容ASCII(0x20~0x7e)。

通常我們見到的字符多數是latin1的,比如在MySQL數據庫中。

去除\xa0str.replace(u'\xa0',u'') 3.\u3000是全角的空白符根據Unicode編碼標准及其基本多語言面的定義,\u3000屬於CJK字符的CJK標點符號區塊內,是空白字符之一。

它的名字是IdeographicSpace,有人譯作表意字空格、象形字空格等。

顧名思義,就是全角的CJK空格。

它跟nbsp不一樣,是可以被換行間斷的。

常用於制造縮進,wiki還說用於抬頭,但沒見過。

去除\u3000str.replace(u'\u3000',u'')去除空格和\xa0、\u3000title.strip().replace(u'\u3000',u'').replace(u'\xa0',u'') ps:關於\ufeff的一些資料(引自維基百科): 字節順序標記(英語:byte-ordermark,BOM)是位於碼點U+FEFF的統一碼字符的名稱。

當以UTF-16或UTF-32來將UCS/統一碼字符所組成的字符串編碼時,這個字符被用來標示其字節序。

它常被用來當做標示文件是以UTF-8、UTF-16或UTF-32編碼的記號。

字符U+FEFF如果出現在字節流的開頭,則用來標識該字節流的字節序,是高位在前還是低位在前。

如果它出現在字節流的中間,則表達零寬度非換行空格的意義,用戶看起來就是一個空格。

從Unicode3.2開始,U+FEFF只能出現在字節流的開頭,只能用於標識字節序,就如它的名稱——字節序標記——所表示的一樣;除此以外的用法已被舍棄。

取而代之的是,使用U+2060來表達零寬度無斷空白。

在UTF-16中,字節順序標記被放置為文件或字符串流的第一個字符,以標示在此文件或字符串流中,以所有十六比特為單位的字碼的尾序(字節順序)。

如果十六比特單位被表示成大尾序,這字節順序標記字符在序列中將呈現0xFE,其后跟着0xFF(其中的0x用來標示十六進制)。

如果十六比特單位使用小尾序,這個字節序列為0xFF,其后接着0xFE。

而統一碼中,值為U+FFFE的碼位被保證將不會被指定成一個統一碼字符。

這意味着0xFF、0xFE將只能被解釋成小尾序中的U+FEFF(因為不可能是大尾序中的U+FFFE)。

UTF-8則沒有字節順序的議題。

UTF-8編碼過的字節順序標記則被用來標示它是UTF-8的文件。

它只用來標示一個UTF-8的文件,而不用來說明字節順序。

[1]許多視窗程序(包含記事本)會添加字節順序標記到UTF-8文件。

然而,在類Unix系統(大量使用文本文件,用於文件格式,用於進程間通信)中,這種做法則不被建議采用。

因為它會妨礙到如解譯器腳本開頭的Shebang等的一些重要的碼的正確處理。

它亦會影響到無法識別它的編程語言。

如gcc會報告源碼檔開頭有無法識別的字符。

而在PHP中,如果沒有激活輸出緩沖(outputbuffering),它會使得頁面內容開始被送往瀏覽器(即:用戶頭文件已被提交),這使PHP腳本無法指定用戶頭文件(HTTPHeader)。

字節順序標記在UTF-8中被表示為序列EFBBBF,對大部分未准備好處理UTF-8的文本編輯器及網頁瀏覽器而言,在ISO-8859-1的環境中則會顯示。

雖然字節順序標記亦可以用於UTF-32,但這個編碼很少用於傳輸,其規則如同UTF-16。

對於已於IANA注冊的字符集UTF-16BE、UTF-16LE、UTF-32BE和UTF-32LE等來說,不可使用字節順序標記。

文檔開頭的U+FEFF會被解釋成一個(已舍棄的)"零寬度無斷空白",因為這些字符集的名字已決定了其字節順序。

對於已注冊字符集UTF-16和UTF-32來說,一個開頭的U+FEFF則用來表示字節順序。

done!   × 免責聲明! 本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。

如果侵犯了您的隱私權益,請聯系本站郵箱[email protected]刪除。

猜您在找 errorerror:illegalcharacter:'\u3000' Python如何去掉字符串‘\xa0’ Python去掉從Excel讀取的空格\xa0 python去掉字符串'\xa0' 三種空格unicode(\u00A0,\u0020,\u3000)表示的區別 unity動態給TextMeshProUGUI進行賦值,\n\u3000等轉義字符失效 去除\ufeff 解決:"UnicodeEncodeError:'ascii'codeccan'tencodecharacteru'\xa0'inposition"錯誤 python去除BOM頭\ufeff等特殊字符 python爬蟲中遇到“\xb5”、“xa0”等字符時報錯編碼錯誤的處理方式   粵ICP備18138465號   ©2018-2022CODEPRJ.COM



請為這篇文章評分?