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

首頁 > 編程 > Python > 正文

python實現unicode轉中文及轉換默認編碼的方法

2020-02-23 04:37:06
字體:
來源:轉載
供稿:網友

本文實例講述了python實現unicode轉中文及轉換默認編碼的方法。分享給大家供大家參考,具體如下:

一、在爬蟲抓取網頁信息時常需要將類似"/u4eba/u751f/u82e6/u77ed/uff0cpy/u662f/u5cb8"轉換為中文,實際上這是unicode的中文編碼。可用以下方法轉換:

1、

>>> s = u'/u4eba/u751f/u82e6/u77ed/uff0cpy/u662f/u5cb8'>>> print s人生苦短,py是岸

2、

>>> s = r'/u4eba/u751f/u82e6/u77ed/uff0cpy/u662f/u5cb8'>>> s = s.decode('unicode_escape')>>> print s人生苦短,py是岸

二、另外,在python2的字符編碼問題時常會遇到“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)”的編碼錯誤。

而用以下方法通常可以解決:

import sysreload(sys)sys.setdefaultencoding('utf-8')

此方法是將Python2的默認編碼ASCII改為 utf-8。但此方法不是一勞永逸的,可能會使一些代碼的行為變得怪異。

關于sys.setdefaultencoding('utf-8')的補充:

sys.setdefaultencoding('utf-8') 會導致的兩個大問題

簡單來說這么做將會使得一些代碼行為變得怪異,而這怪異還不好修復,以一個不可見的 bug 存在著。下面我們舉兩個例子。

1. 編碼錯誤

import chardetdef print_string(string):  try:    print(u"%s" % string)  except UnicodeError:    print u"%s" % unicode(byte_string, encoding=chardet.detect(string)['encoding'])print_string(u"þ".encode("latin-1"))import sysreload(sys)sys.setdefaultencoding('utf-8')print(key_in_dict('þ'))

輸出:

$~ þ$~ þ

在上面的代碼中,默認的 ascii 編碼無法解碼,þ latin-1 編碼 hex 表示是 c3 be ,顯然是超出了只有128個字符的 ascii 碼集的,引發 UnicodeError 異常,進入異常處理。異常處理則會根據編碼探測,用最可能的編碼來解碼,會比較靠譜地輸出 þ 。

而一旦我們將 defaultencoding 設置為 utf-8,因為 utf-8 的字符范圍是完全覆蓋 latin-1,因此,會直接使用 utf-8 進行解碼。c3 be 在 utf-8 中,是 þ。于是我們打印出了完全不同的字符。

可能你們會說我們不會寫這樣的代碼。如果我們寫了也會做修正。但如果是第三方庫這么寫了呢?項目依賴的第三方庫就這么 bug 了。如果你不依賴第三方庫,那么下面這個 bug,還是逃不過。

2. dictionray 行為異常

假設我們要從一個 dictionary 里查找一個 key 是否存在,通常來說,有兩種可行方法。

#-*- coding: utf-8 -*-d = {1:2, '1':'2', '你好': 'hello'}def key_in_dict(key)  if key in d:    return True  return Falsedef key_found_in_dict(key):  for _key in d:    if _key == key:      return True  return False            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 特克斯县| 安顺市| 榆中县| 铜鼓县| 阿勒泰市| 班戈县| 安塞县| 大足县| 博兴县| 麻栗坡县| 什邡市| 新宾| 沂南县| 晋宁县| 天台县| 新兴县| 新巴尔虎右旗| 光山县| 九龙县| 鹿邑县| 德惠市| 财经| 宝兴县| 南汇区| 阳原县| 绵竹市| 曲阳县| 宣汉县| 新民市| 芜湖县| 阳山县| 木兰县| 谷城县| 九龙县| 岳阳县| 吉安县| 澳门| 三明市| 鄂托克旗| 津市市| 错那县|