日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 字符串 编码 解码_Python 字符串编解码研究

發布時間:2023/12/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 字符串 编码 解码_Python 字符串编解码研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 2.X 在輸入漢字和特殊字符的時候,經常遇到編碼解碼的問題,究其原因,編譯器默認將文件當做ascii編碼,因此要正確的實現編解碼的轉換,需要進行一些設置。

首先讓我們來了解幾個概念。

文件編碼、字符串編碼、系統編碼

代碼中字符串的默認編碼與代碼文件本身的編碼一致。

舉個例子,如果是在utf8的文件中,那么字符串就是utf8編碼;如果是在gb2312的文件中,則其編碼為gb2312。 但是,如果指明了字符串為unicode字符串,那么就是unicode編碼。

代碼文件的默認編碼與系統編碼一致,因此如果不指定文件的編碼,那么默認的編碼格式就是系統編碼。 那么如何查看系統編碼?

env |grep -i lang

或者,在交互式python命令行下,執行如下命令:

import sys

sys.getdefaultencoding()

輸出一般都是ascii,系統編碼一般是utf8,所以需要先把二者統一。

如何設置編碼

方法1

在python文件開頭加上# –– coding: utf-8 –– 來識別中文并能夠把中文正確的轉換為unicode。

方法2

修改python的默認系統編碼

>>> import sys,locale

>>> sys.getdefaultencoding()

'ascii'

>>> sys.setdefaultencoding() #這里會報錯,找不到setdefaultencoding()函數

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'module' object has no attribute 'setdefaultencoding'

>>> reload(sys) #需要reload。

>>> locale.getdefaultlocale()

('zh_CN', 'UTF-8')

>>> sys.setdefaultencoding("UTF-8") #把編碼與操作系統統一起來

>>> sys.getdefaultencoding()

'UTF-8'

之所以要reload(sys),因為python環境在初始化的時候要執行site.py這個文件,而為了防止用戶修改python的默認編碼,在site.py文件中會把setdefaultencoding()函數del 掉,因此我們必須通過reload(sys)把這個函數找回來。 有興趣的不妨自己試一下:

先rpm -qa|grep python26 找到python的包

然后rpm -q -l python26-2.6.8-1.el5|grep site.py 找到site.py文件的位置

我的機器上是:/usr/lib64/python2.6/site.py

vi打開,main函數里面,有一段:

if ENABLE_USER_SITE:

execusercustomize()

# Remove sys.setdefaultencoding() so that users cannot change the

# encoding after initialization. The test for presence is needed when

# this module is run as a script, because this code is executed twice.

if hasattr(sys, "setdefaultencoding"):

del sys.setdefaultencoding

重新reload一下sys,把setdefaultencoding函數給找回來。再setdefaultencoding就對了。

編碼與解碼

環境設置正確后,就可以進行編碼轉換了。python中的編碼轉換用decode和encode來實現,unicode編碼可以認為是各種編碼之間轉換的橋梁。

decode的作用是將其他編碼的字符串轉換成unicode編碼,如str1.decode(‘gb2312’),表示將gb2312編碼的字符串str1轉換成unicode編碼,因此,如果str1本身不是gb2312編碼,就會報錯。

encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2.encode(‘gb2312’),表示將unicode編碼的字符串str2轉換成gb2312編碼,因此,需要str2本身的編碼是unicode。

總結一下,

u.encode(‘…’)基本上總是能成功的,只要你填寫了正確的目標編碼。這就像任何文件都可以壓縮成zip文件,是一個道理。

s.decode(‘…’)經常會出錯,因為s是什么“編碼”取決于上下文,當你解碼的時候需要確保s是用什編碼。就像打開zip文件的時候,你要確保它確實是zip文件,而不僅僅是偽造了擴展名的zip文件。

Python3中,已經默認采用utf8編碼了。

Python 的詳細介紹:請點這里

Python 的下載地址:請點這里

總結

以上是生活随笔為你收集整理的python 字符串 编码 解码_Python 字符串编解码研究的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。