国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在Python中關于中文編碼問題的處理建議

2020-02-23 00:35:39
字體:
來源:轉載
供稿:網友

字符串是Python中最常用的數據類型,而且很多時候你會用到一些不屬于標準ASCII字符集的字符,這時候代碼就很可能拋出UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 10: ordinal not in range(128)異常。這種異常在Python中很容易遇到,尤其是在Python2.x中,是一個很讓初學者費解頭疼的問題。不過,如果你理解了Python的Unicode,并在編碼中遵循一定的原則,這種編碼問題還是比較容易理解和解決的。

字符串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。但是,Python 2.x的默認編碼格式是ASCII,就是說,在沒有指定Python源碼編碼格式的情況下,源碼中的所有字符都會被默認為ASCII碼。也因為這個根本原因,在Python 2.x中經常會遇到UnicodeDecodeError或者UnicodeEncodeError的異常。

關于Unicode

Unicode是一種字符集,它為每一種現代或古代使用的文字系統中出現的每一個字符都提供了統一的序列號,規定了符號的二進制代碼,但沒有規定這個二進制代碼應該如何存儲。也就是說:Unicode的編碼方式是固定的,但是實現方式根據不同的需要有跟多種,常見的有UTF-8、UTF-16和UTF-32等。更多的介紹大家可以參看維基百科:Unicode

為了能夠處理Unicode數據,同時兼容Python某些內部模塊,Python 2.x中提供了Unicode這種數據類型,通過decode和encode方法可以將其它編碼和Unicode編碼相互轉化,但同時也引入了UnicodeDecodeError和UnicodeEncodeError異常。。

常見的幾種編碼異常

Python中常見的幾種編碼異常有SyntaxError: Non-ASCII character、UnicodeDecodeError和UnicodeEncodeError等。下面依次舉例說明一下:

1、SyntaxError: Non-ASCII character

這種異常最不容易出現,也最容易處理,主要原因是Python源碼文件中有非ASCII字符,而且同時沒有聲明源碼編碼格式,例如:
 

s = '中文'print s   # 拋出異常

2、UnicodeDecodeError

這個異常有時候會在調用decode方法時出現,原因是Python打算將其他編碼的字符轉化為Unicode編碼,但是字符本身的編碼格式和decode方法傳入的編碼格式不一致,例如:
 

#!/usr/bin/python# -*- coding: utf-8 -*-s = '中文's.decode('gb2312') # UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequenceprint s

上面這段代碼中字符串s的編碼格式是utf-8,但是在使用decode方法轉化為Unicode編碼時傳入的參數是‘gb2312',因此在轉化的時候拋出UnicodeDecodeError異常。還有一種情況是在encode的時候:
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉善县| 汉源县| 牙克石市| 中宁县| 东丽区| 莎车县| 右玉县| 天长市| 昌吉市| 乌兰察布市| 大同县| 抚顺县| 遵化市| 财经| 北京市| 虹口区| 宁武县| 大港区| 文化| 淮滨县| 兴隆县| 信丰县| 棋牌| 额济纳旗| 翼城县| 合江县| 泽州县| 嵊州市| 久治县| 电白县| 鸡东县| 杭锦后旗| 前郭尔| 榆林市| 民丰县| 克什克腾旗| 饶阳县| 四平市| 丰城市| 武宁县| 巫溪县|