1. 程式人生 > >Python中文編碼問題(字串前面加'u')

Python中文編碼問題(字串前面加'u')

中文編碼問題是用中文的程式設計師經常頭大的問題,在python下也是如此,那麼應該怎麼理解和解決python的編碼問題呢?

我們要知道python內部使用的是unicode編碼,而外部卻要面對千奇百怪的各種編碼,比如作為中國程式經常要面對的gbk,gb2312,utf8等,那這些編碼是怎麼轉換成內部的unicode呢?

首先我們先看一下原始碼檔案中使用字串的情況。原始碼檔案作為文字檔案就必然是以某種編碼形式儲存程式碼的,python預設會認為原始碼檔案是asci編碼,比如說程式碼中有一個變數賦值:

s1=’a’ 
print s1

python認為這個’a’就是一個asci編碼的字元。在僅僅使用英文字元的情況下一切正常,但是如果用了中文,比如:

s1=’哈’ 
print s1

這個程式碼檔案被執行時就會出錯,就是編碼出了問題。python預設將程式碼檔案內容當作asci編碼處理,但asci編碼中不存在中文,因此丟擲異常。

解決問題之道就是要讓python知道檔案中使用的是什麼編碼形式,對於中文,可以用的常見編碼有utf-8,gbk和gb2312等。只需在程式碼檔案的最前端新增如下:

# -*- coding: utf-8 -*-

這就是告知python我這個檔案裡的文字是用utf-8編碼的,這樣,python就會依照utf-8的編碼形式解讀其中的字元,然後轉換成unicode編碼內部處理使用。

不過,如果你在Windows控制檯下執行此程式碼的話,雖然程式是執行了,但螢幕上打印出的卻不是哈字。這是由於python編碼與控制檯編碼的不一致造成的。Windows下控制檯中的編碼使用的

是gbk,而在程式碼中使用的utf-8,python按照utf-8編碼列印到gbk編碼的控制檯下自然就會不一致而不能打印出正確的漢字。

解決辦法一個是將原始碼的編碼也改成gbk,也就是程式碼第一行改成:

# -*- coding: gbk -*-

另一種方法是保持原始碼檔案的utf-8不變,而是在’哈’前面加個u字,也就是:

s1=u’哈’ 
print s1

這樣就可以正確打印出’哈’字了。

這裡的這個u表示將後面跟的字串以unicode格式儲存。python會根據程式碼第一行標稱的utf-8編碼識別程式碼中的漢字’哈’,然後轉換成unicode物件。如果我們用type檢視一下’哈’的資料型別type(‘哈’),會得到

s1=unicode(‘哈’, ‘utf-8′) 
print s1

另外,用decode函式也可以將一個普通字串轉換為unicode物件。很多人都搞不明白python字串的decode和encode函式都是什麼意思。這裡簡要說明一下。

decode是將普通字串按照引數中的編碼格式進行解析,然後生成對應的unicode物件,比如在這裡我們程式碼用的是utf-8,那麼把一個字串轉換為unicode就是如下形式:

s2=’哈’.decode(‘utf-8′)

這時,s2就是一個儲存了’哈’字的unicode物件,其實就和unicode(‘哈’, ‘utf-8′)以及u’哈’是相同的。

那麼encode正好就是相反的功能,是將一個unicode物件轉換為引數中編碼格式的普通字元,比如下面程式碼:

s3=unicode(‘哈’, ‘utf-8′).encode(‘utf-8′)

s3現在又變回了utf-8的’哈’。

相關推薦

Python中文編碼問題(字串前面'u')

中文編碼問題是用中文的程式設計師經常頭大的問題,在python下也是如此,那麼應該怎麼理解和解決python的編碼問題呢? 我們要知道python內部使用的是unicode編碼,而外部卻要面對千奇百怪的各種編碼,比如作為中國程式經常要面對的gbk,gb2312

python字串前面u,r,b的含義

u/U:表示unicode字串 不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行unicode編碼。 一般英文字元在使用各種編碼下, 基本都可以正常解析, 所以一般不帶u;但是中文, 必須

Python3 字串前面u,r,b的含義

u/U:表示unicode字串 不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行unicode編碼。 一般英文字元在使用各種編碼下, 基本都可以正常解析, 所以一般不帶u;但是中文, 必須表明所需編碼, 否則一旦編碼轉換就會出現亂碼。 建議所有編碼方式採用utf8。在python3中,字串預設為u

python中使用字串前面r

最近在使用python進行讀取的檔案時,總需要在路徑中去除掉一些特殊意義的字元進行轉義 在網上搜了一下,在python中除了可以使用‘\’之外,我們也可以使用r加在所要處理的字元外面 如下所示 path_t =r"D:\worksapce_python\20160426_

Pyhon 中文編碼問題(字串U’)

中文編碼問題是用中文的程式設計師經常頭大的問題,在python下也是如此,那麼應該怎麼理解和解決python的編碼問題呢? 我們要知道python內部使用的是unicode編碼,而外部卻要面對千奇百怪的各種編碼,比如作為中國程式經常要面對的gbk,gb2312,utf8等,那這些編碼是怎麼轉換成內部的uni

python字符串前面u代表什麽

編碼 解析 中文字符 再次 基本 python字符串 組成 出現 防止 1、字符串前加 u   例:u"我是含有中文字符組成的字符串。"   作用:後面字符串以 Unicode 格式 進行編碼,一般用在中文字符串前面,防止因為源碼儲存格式問題,導致再次使用時出現亂碼。

Python字串前面'r'的用法

在開啟檔案的時候open(r'c:\....') 加r和不加''r是有區別的 'r'是防止字元轉義的 如果路徑中出現'\t'的話 不加r的話\t就會被轉義 而加了'r'之後'\t'就能保留原有的樣子

python 字串前面新增u,r,b的含義

u/U:表示unicode字串 不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行unicode編碼。 一般英文字元在使用各種編碼下, 基本都可以正常解析, 所以一般不帶u;但是中文, 必須表明所需編碼, 否則一旦編碼轉換就會出現亂碼。 建議

python字串前面r

在開啟檔案的時候open(r'c:\....') 加r和不加''r是有區別的 'r'是防止字元轉義的 如果路徑中出現'\t'的話 不加r的話\t就會被轉義 而加了'r'之後'\t'就能保留原有的樣子 在字串賦值的時候 前面加'r'可以防止字串在時候的時候不被轉義

Python 字串前面 r

在Python的string前面加上‘r’, 是為了告訴編譯器這個string是個raw string,不要轉意backslash '\' 。 例如,\n 在raw string中,是兩個字元,\和n, 而不會轉意為換行符。由於正則表示式和 \ 會有衝突,因此,當一個字串使

[Python][小知識] Python字串 u、r、b 的含義

1、字串前加 u   例:u"我是含有中文字元組成的字串。"   作用:後面字串以 Unicode 格式 進行編碼,一般用在中文字串前面,防止因為原始碼儲存格式問題,導致再次使用時出現亂碼。   PS:不是僅僅是針對中文, 可以針對任何的字串,代表是對字串進行。一般英文字元

Python 字串前面'r'

在Python的string前面加上‘r’, 是為了告訴編譯器這個string是個raw string,不要轉意backslash '\' 。 例如,\n 在raw string中,是兩個字元,\和n, 而不會轉意為換

[Python][小知識] Python字符串前 u、r、b 的含義

image cnblogs 學校 es2017 1-1 bytes unicode python字符串 正常 1、字符串前加 u   例:u"我是含有中文字符組成的字符串。"   作用:後面字符串以 Unicode 格式 進行編碼,一般用在中文字符串前面,防止因為源碼儲存格

Python 中文編碼

輸出結果 開頭 ref 文件 找到 編輯器 sci .cn 文件中 Python 中文編碼 前面章節中我們已經學會了如何用 Python 輸出 "Hello, World!",英文沒有問題,但是如果你輸出中文字符"你好,世界"就有可能會碰到中文編碼問題。 Python 文件

字符串前面u、r、b的含義

code re模塊 字符串 普通 亂碼 bytes 3.x nic 編碼 u/U:表示unicode字符串 不是僅僅是針對中文, 可以針對任何的字符串,代表是對字符串進行unicode編碼。 一般英文字符在使用各種編碼下, 基本都可以正常解析, 所以一般不帶u;但是中文,

python中文編碼

python2.x版本: python內部使用unicode 原始碼檔案預設是asci,但asci不存在中文編碼,解決:# -*- coding: utf-8 -*- 中文編碼有:gbk,gb2312,

python中文編碼問題解決UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-14: ordinal n

編碼報錯: https://www.baidu.com/s?wd=渴望飛的魚 UnicodeEncodeError: 'ascii' codec can't encode characters in

python中文編碼問題(decode('gbk').encode('utf-8')和decode('utf-8').encode('gbk')這對好基友)

    想必每個Python新手都會遇到Python編碼的問題,特別是使用到漢字的時候。UTF-8編碼是比較通用的編碼方式,它可以輸出中文,而Python2中預設的編碼方式一般是GBK,所以往往我們期

python - 中文編碼/ASCII

Python 中文編碼:為了處理漢字,程式設計師設計了用於簡體中文的GB2312和用於繁體中文的big5.    GB2312(1980年)一共收錄了7445個字元,包括6763個漢子和682個其他符號。漢字區的內碼範圍高位元組從B0-E7,低位元組A1-FE,佔用的碼位是72*94=67

python去掉 unicode 字串前面的 u

有時我們會碰到類似下面這樣的 unicode 字串: u'\xe4\xbd\xa0\xe5\xa5\xbd' 這明顯不是一個正確的 unicode 字串,可能是在哪個地方轉碼轉錯了。 我們要想得到正確的 unicode 字串首先就必須先將這個字串轉成非