4. 疑難問題解答 編碼識別 說了要確定編碼,那么拿到一串二進制要怎么確定編碼呢?
最簡單的方法是chardet:(需要安裝)
python -m pip install chardet
使用非常簡單:
#coding=utf8 from chardet
import detect
print(detect('這是一串utf8的測試字符'))
# 結果:`{'confidence': 0.99, 'encoding': 'utf-8'}` 另外例如抓取網(wǎng)站,那么頭文件中很有可能有提示如何解碼,記得不要忘記了。
編碼轉換 很可能因為字符串中參雜了奇怪的東西,導致即使編碼種類正確,依舊無法解碼。
我知道我之前講過了,但可能有人直接跳疑難問題解答嘛。
這里可以使用decode的第二個參數(shù):
#coding=utf8 # 字符串中混進了\x00rubbishUtf8String = 'Utf-8字\x00符串'
print(repr(rubbishUtf8String.decode('utf8', 'replace')))
print(repr(rubbishUtf8String.decode('utf8', 'ignore')))
特殊平臺下編碼 很多人都說Windows是個坑,即使在Python 3下面也一樣。
因為中文文件名出來都是亂碼。
這里使用一個取巧的方法:平臺編碼再特殊,起碼命令行讀取和創(chuàng)建一個文件夾不會出亂碼吧。
import sys, os
for folder
in os.walk('.').next()[1]:
print(folder.decode(sys.stdin.encoding))
同樣的輸入輸出也可以這樣做優(yōu)化:
import sys
def sys_print(msg):
print(msg.encode(sys.stdin.encoding))
def sys_input(msg):
return raw_input(msg.encode(sys.stdin.encoding)).decode(sys.stdin.encoding)
文件寫入 如果抓下來一個內(nèi)容不知道怎么解碼,但還是想要寫入文件怎么辦
寫入文件的時候制定用二進制命令即可:
#coding=utf8import urllib
with open('Utf8.txt', 'wb')
as f: f.write('Utf8測試')
# 比如抓了個網(wǎng)頁,不知道編碼也可以寫入文件進行一系列操作 content = urllib.urlopen('http://www.baidu.com').read()
with open('baidu.txt', 'wb')
as f: f.write(content)
裸Unicode字符 Unicode存成六個Ascii字符怎么辦?其實也可以decode
#coding=utf8# 這是普通的Unicodes = u'測'
for i
in s: print(i)
print(repr(s))
# 這是裸Unicode,實際存成了六個Asciis = repr(s)[2:-1]
for i
in s: print(i)
print(repr(s))
# 轉化其實也很簡單s = s.decode('unicode-escape')
for i
in s: print(i)
print(repr(s))
好了,希望這篇文章對大家解決Python編碼問題有所幫助!
本文版權歸黑馬程序員Python培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:黑馬程序員Python培訓學院
首發(fā):http://ko1818.cn/news/python.html