本文目錄一覽:
- 1、關於python中字符編碼的問題
- 2、Python 字符集編碼 – UTF-8 編碼
- 3、Python編碼字符串解碼問題,怎麼解決
- 4、python 字符串編碼問題
- 5、python字符串是亂碼怎麼辦
- 6、Python 源程序編碼注意事項?
關於python中字符編碼的問題
你說的是,把字符串:
\u3232\u6674
本身,轉換為unicode字符吧?
那麼可以通過:
slashUStr = “\\u3232\\u6674”;
decodedUniChars = slashUStr.decode(“unicode-escape”);
print “decodedUniChars=”,decodedUniChars; #decodedUniChars= (有) 晴
註:(有) 是個特殊字符,如果想要在cmd(默認為gbk)中打印,會出錯的。
UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u3232′ in position 0: illegal multibyte sequence
但是,本身的確已經是轉換好了unicode字符串了。
詳情可參考:
【整理】Python中,如何將反斜杠u類型(\uXXXX)的字符串,轉換為對應的unicode的字符
(此處不能貼地址,請用google搜標題,即可找到帖子地址)
Python 字符集編碼 – UTF-8 編碼
Unicode 的編碼範圍為 0~0x10FFFF ,如此大的範圍,顯然沒辦法像 ASCII 編碼一樣使用一個位元組存儲。為此,Unicode 制定了各種儲存編碼的方式,如: UTF-8 、 UTF-16 和 UTF-32 ,這些存儲格式被稱為 Unicode 轉換格式 UTF 。
每種 Unicode 轉換格式都會把一個編碼存儲為一到多個編碼單元,如 UTF-8 的編碼單元為 8 位的位元組; UTF-16 的編碼單元為 16 位,即 2 個位元組; UTF-32 的編碼單元為 32 位,即 4 個位元組。
其中, UTF-8 是在互聯網上使用最廣泛的一種 Unicode 轉換格式,具有以下顯著的優勢。下面,我們就先來看看 UTF-8 具有哪些有點吧~
1. UTF-8 中每個 ASCII 字符只需要一個位元組去存儲,因此一個 ASCII 文本本身也是一個 UTF-8 文本,即做到了向後兼容。
比如 A 的 ASCII 碼對應為 0x41 , a 的 ASCII 碼對應為 0x61 ,那麼 UTF-8 兼容 ASCII 也就意味着:
這裡,需要再次提醒一下:Unicode 是表現形式,UTF-8 是存儲形式;即 UTF-8 解碼之後為 Unicode ,Unicode 可以編碼成 UTF-8 。
2. UTF-8 採用位元組為存儲單元,因此不存在位元組的大端和小段的問題。
UTF-16 和 UTF-32 的存儲單元分別是 2 位元組和 4 位元組,因此在存儲時會涉及到大小端的問題。那什麼是大小端模式呢?下面我們來暫停補充一下~
關於如何獲知你的環境使用的是大端模式還是小端模式,這裡有個簡單的方式:定義一個 short 類型的數組即可:
數字 1 在 short 類型中表示為 0x0001 ,高位為 0x00 ,低位為 0x01 。我們可以很直觀地看到,數組在保存數據時,將高位 0x00 放在了高地址處,將低位 0x01 放在了低地址處。因此使用的就是小端模式。
那 UTF-8 為什麼可以使用位元組來作為存儲單元,而不用擔心位元組序的問題呢?這就涉及到了 UTF-8 巧妙的編碼規則~
UTF-8 最大的一個特點,就是它是一種變長的編碼方式。它可以使用 1~4 個位元組表示一個符號,根據不同的符號而變化位元組長度。UTF-8的編碼規則很簡單,只有二條:
1)對於單位元組符號,位元組的第一位設為 0 ,後 7 位為這個符號的 Unicode 碼。也就是我們上文提到的向後兼容:對於英文字母,UTF-8 編碼和 ASCII 碼是相同的。
2)對於使用 X 個位元組存儲的符號,第一個位元組的前 X 位設置為 1 ,第 X+1 位設置為 0 ,後面位元組的前 2 位一律設置為 10 ,剩下的位置一次填充這個符號的 Unicode 碼。
下表總結了編碼規則,字母 x 表示可用於編碼的位:
跟據上表,解讀 UTF-8 編碼也非常簡單:如果一個位元組的第一位是 0 ,則這個位元組單獨就是一個字符;如果第一位是 1 ,則連續有多少個 1 ,就表示當前字符佔用多少個位元組。
下面,我們就來演示一下 UTF-8 編碼的過程。
首先,獲取漢字 魚 的 Unicode 碼:
我們不妨先對 魚 這個漢字使用 utf-8 編碼看看使用幾個位元組存儲:
魚 在 UTF-8 編碼中使用 3 個位元組存儲,因此其存儲的二進制的形式為 1110xxxx 10xxxxxx 10xxxxxx ,將 Unicode 1001 110001 111100 依次填充到佔位符 x 的位置就得到: 11101001 10110001 10111100 。
下面,我們將上述推導得出的 11101001 10110001 10111100 轉換為十六進制,驗證一下是否為 b’\xe9\xb1\xbc’ :
驗證無誤!
Python編碼字符串解碼問題,怎麼解決
在將字符串寫入文件時,執行f.write(str),後台總是報錯:UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\u6211′ in position 0: ordinal not in range(128),即ascii碼無法被轉換成unicode碼。
剛開始我以為Python默認的編碼是utf-8,所以使用decode方法和encode方法來進行編碼轉換,後來怎麼也不成功,於是懷疑是否默認編碼不是utf-8。
使用下面語句獲取python當前的默認編碼:
[python] view plain copy
import sys
print sys.getdefaultencoding()
python 字符串編碼問題
首先你看下後台是否有異常,是否是因為編碼的問題
其次你的key是什麼,是Name或者Description么,你可以把Name弄成西班牙語,Desciption寫成英文,同時取這兩個,看看是否正常
只能這樣一點點調試了
如果解決了您的問題請採納!
如果未解決請繼續追問
python字符串是亂碼怎麼辦
顯示亂碼的主要原因是:字符串編碼集問題
其原因詳細:
Windows 下的字符串編碼集為GBK 而我們的Python字符串一般是 UTF-8
代碼詳情:
#!/usr/bin/python
# coding: utf-8
os_char=’gb18030′ # 定義轉換類型為GB18030
print u”我是字符串” # 直接打印Unicode
print u”我是字符串”.encode(os_char) # 轉換為GB18030編碼
print “我是字符串”.decode(“utf-8”).encode(os_char) # 先轉換為UTF-8 再轉換為GB18030
備註:
之前的第一行(#!) 為Linux環境下的執行文件聲明 如 Bash 的聲明為 #!/bin/bash
第二行註明編碼集為GB18030
Linux下的編碼集為 UTF-8
Python 源程序編碼注意事項?
默認情況下,Python 源文件是 UTF-8 編碼。在此編碼下,全世界大多數語言的字符可以同時用在字符串、標識符和注釋中 — 儘管 Python 標準庫僅使用 ASCII 字符作為標識符,這只是任何可移植代碼應該遵守的約定。如果要正確的顯示所有的字符,你的編輯器必須能識別出文件是 UTF-8 編碼,並且它使用的字體能支持文件中所有的字符。
你也可以為源文件制定不同的字符編碼。為此,在 #! 行(首行)後插入至少一行特殊的注釋行來定義源文件的編碼:
# -*- coding: encoding -*-
通過此聲明,源文件中所有的東西都會被當作用 encoding 指代的 UTF-8 編碼對待。在 Python 庫參考手冊 codecs 一節中你可以找到一張可用的編碼列表。
例如,如果你的編輯器不支持 UTF-8 編碼的文件,但支持像 Windows-1252 的其他一些編碼,你可以定義:
# -*- coding: cp-1252 -*-
這樣就可以在源文件中使用 Windows-1252 字符集中的所有字符了。這個特殊的編碼注釋必須在文件中的 第一或第二 行定義。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/295739.html