當前位置:首頁 » 編程語言 » pythonobjectstring

pythonobjectstring

發布時間: 2022-04-22 01:11:54

『壹』 我用python處理字元串時,其中一項用到標點,即string.punctuation,為什麼每次都出現錯誤,提示如下:

AttributeError: 'str' object has no attribute 'punctuation'

屬性錯誤:『str』沒有『punctuation』這個屬性。
把代碼貼上來,看看你想做什麼
你提供的這點信息什麼也看不出來

『貳』 python string和PyQt的QString的區別

以下在 Python2.6和PyQt4.4.4 for Python2,6環境下討論:
Python中有兩種有關字元的類型:Python string object和Python Unicode object。主要使用Python string object進行數據輸入輸出。
PyQt中與之相對應的字元有關類型是:QByteArray和QString。主要使用QString操作數據。

1)Python string object是原始編碼是有區分的,通過 decode('原始編碼') 解碼得到utf16類型即Python Unicode object。Python Unicode object原始編碼固定是utf16,通過 encode('目的編碼') 編碼來得到Python string object。
2)對於英 文,PyQt函數需要QString參數的地方都可以直接用Python string object或者Python Unicode object。對於中文,利用unicode()函數顯示指定gb2312編碼進行中文編碼轉換,轉換後的Python Unicode object可以直接作為QString參數代入。
unicode('中 文', 'gb2312', 'ignore')
3)對於英文,可以使 用unicode()直接將QString轉換為Python Unicode object,並進一步encode()得到Python string object,也可以使用str()函數直接將QString轉換為Python string object。對於中文,利用unicode()指定原始編碼gbk來解決QString轉換為Python Unicode object問題,但對於GUI使用仍有缺陷,不過無礙;進一步利用encode('gb2
312')得到Python string object,或者結合QString的toUtf8()再利用str()函數;但對於GUI編程str()方法還是不行,只可結合QString的 toUtf8()進行unicode()轉換後再利用encode('gb2
312')。
str(QtCore.QString(' 中文').toAscii())
unicode(QtCore.QString('中文'),'gbk','ignore').encode('gb2312')
myText = unicode(self.myLineEdit.text().toUtf8(),'utf8', 'ignore').encode('gb2312')

『叄』 python 這個報錯怎麼解決

展開全部
python新手常見的報錯提示
在運行或編寫一個程序時常會遇到錯誤異常,這時Python會給你一個錯誤提示類名,告訴出現了什麼樣的問題(Python是面向對象語言,所以程序拋出的異常也是類)。能很好的理解這些錯誤提示類名所代表的意思,可以幫助你在最快的時間內找到問題所在,從而解決程序上的問題是非常有幫助的。
搜集了一些python最重要的內建異常類名,並做了簡單的介紹:
AttributeError:屬性錯誤,特性引用和賦值失敗時會引發屬性錯誤
NameError:試圖訪問的變數名不存在
SyntaxError:語法錯誤,代碼形式錯誤
Exception:所有異常的基類,因為所有python異常類都是基類Exception的其中一員,異常都是從基類Exception繼承的,並且都在exceptions模塊中定義。
IOError:一般常見於打開不存在文件時會引發IOError錯誤,也可以解理為輸出輸入錯誤
KeyError:使用了映射中不存在的關鍵字(鍵)時引發的關鍵字錯誤
IndexError:索引錯誤,使用的索引不存在,常索引超出序列范圍,什麼是索引
TypeError:類型錯誤,內建操作或是函數應於在了錯誤類型的對象時會引發類型錯誤
ZeroDivisonError:除數為0,在用除法操作時,第二個參數為0時引發了該錯誤
ValueError:值錯誤,傳給對象的參數類型不正確,像是給int()函數傳入了字元串數據類型的參數。
1)忘記在 if , elif, else , for , while , class ,def 聲明末尾添加:(導致 「SyntaxError :invalid syntax」)
該錯誤將發生在類似如下代碼中:
if spam == 42
print('Hello!')
2)使用 = 而不是 ==(導致「SyntaxError: invalid syntax」)
= 是賦值操作符而 == 是等於比較操作。該錯誤發生在如下代碼中:
if spam = 42:
print('Hello!')
3)錯誤的使用縮進量。(導致「IndentationError:unexpected indent」、「IndentationError:unindent does not match any outer indetation level」以及「IndentationError:expected an indented block」)
記住縮進增加只用在以:結束的語句之後,而之後必須恢復到之前的縮進格式。該錯誤發生在如下代碼中:
print('Hello!')
print('Howdy!')
或者:
if spam == 42:
print('Hello!')
print('Howdy!')
或者:
if spam == 42:
print('Hello!')
4)在 for 循環語句中忘記調用 len() (導致「TypeError: 'list' object cannot be interpreted as aninteger」)
通常你想要通過索引來迭代一個list或者string的元素,這需要調用 range() 函數。要記得返回len 值而不是返回這個列表。
該錯誤發生在如下代碼中:
spam = ['cat','dog', 'mouse']
for i inrange(spam):
print(spam[i])
5)嘗試修改string的值(導致「TypeError: 'str' object does not support itemassignment」)
string是一種不可變的數據類型,該錯誤發生在如下代碼中:
spam = 'I have apet cat.'
spam[13] = 'r'
print(spam)
而你實際想要這樣做:
spam = 'I have apet cat.'
spam = spam[:13] +'r' + spam[14:]
print(spam)
6)嘗試連接非字元串值與字元串(導致 「TypeError: Can't convert 'int' object to strimplicitly」)
該錯誤發生在如下代碼中:
numEggs = 12
print('I have ' +numEggs + ' eggs.')
而你實際想要這樣做:
numEggs = 12
print('I have ' +str(numEggs) + ' eggs.')
或者:
numEggs = 12
print('I have %seggs.' % (numEggs))
7)在字元串首尾忘記加引號(導致「SyntaxError: EOL while scanning string literal」)
該錯誤發生在如下代碼中:
print(Hello!')
或者:
print('Hello!)
或者:
myName = 'Al'
print('My name is '+ myName + . How are you?')
8)變數或者函數名拼寫錯誤(導致「NameError: name 'fooba' is not defined」)
該錯誤發生在如下代碼中:
foobar = 'Al'
print('My name is '+ fooba)
或者:
spam = ruond(4.2)
或者:
spam = Round(4.2)
9)方法名拼寫錯誤(導致 「AttributeError: 'str' object has no attribute'lowerr'」)
該錯誤發生在如下代碼中:
spam = 'THIS IS INLOWERCASE.'
spam =spam.lowerr()
10)引用超過list最大索引(導致「IndexError: list index out of range」)
該錯誤發生在如下代碼中:
spam = ['cat','dog', 'mouse']
print(spam[6])
11)使用不存在的字典鍵值(導致「KeyError:『spam』」)
該錯誤發生在如下代碼中:
spam = {'cat':'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name ofmy pet zebra is ' + spam['zebra'])
12)嘗試使用Python關鍵字作為變數名(導致「SyntaxError:invalid syntax」)
Python關鍵不能用作變數名,該錯誤發生在如下代碼中:
class = 'algebra'
Python3的關鍵字有:and, as, assert, break, class, continue, def, del, elif,else, except, False, finally, for, from, global, if, import, in, is, lambda,None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield
13)在一個定義新變數中使用增值操作符(導致「NameError: name 'foobar' is not defined」)
不要在聲明變數時使用0或者空字元串作為初始值,這樣使用自增操作符的一句spam += 1等於spam = spam + 1,這意味著spam需要指定一個有效的初始值。
該錯誤發生在如下代碼中:
spam = 0
spam += 42
eggs += 42
14)在定義局部變數前在函數中使用局部變數(此時有與局部變數同名的全局變數存在)(導致「UnboundLocalError: local variable 'foobar' referencedbefore assignment」)
在函數中使用局部變來那個而同時又存在同名全局變數時是很復雜的,使用規則是:如果在函數中定義了任何東西,如果它只是在函數中使用那它就是局部的,反之就是全局變數。
這意味著你不能在定義它之前把它當全局變數在函數中使用。
該錯誤發生在如下代碼中:
someVar = 42
def myFunction():
print(someVar)
someVar = 100
myFunction()
15)嘗試使用 range()創建整數列表(導致「TypeError: 'range' object does not support itemassignment」)
有時你想要得到一個有序的整數列表,所以 range() 看上去是生成此列表的不錯方式。然而,你需要記住 range() 返回的是 「range object」,而不是實際的 list 值。
該錯誤發生在如下代碼中:
spam = range(10)
spam[4] = -1
也許這才是你想做:
spam =list(range(10))
spam[4] = -1
(注意:在 Python 2 中 spam = range(10) 是能行的,因為在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就會產生以上錯誤)
16)不錯在 ++ 或者 -- 自增自減操作符。(導致「SyntaxError: invalid syntax」)
如果你習慣於例如 C++ , java, PHP 等其他的語言,也許你會想要嘗試使用 ++ 或者 -- 自增自減一個變數。在Python中是沒有這樣的操作符的。
該錯誤發生在如下代碼中:
spam = 1
spam++
也許這才是你想做的:
spam = 1
spam += 1
17)忘記為方法的第一個參數添加self參數(導致「TypeError: myMethod() takes no arguments (1 given)」)
該錯誤發生在如下代碼中:
class Foo():
def myMethod():
print('Hello!')
a = Foo()
a.myMethod()

『肆』 python mongo 的objectid 怎麼轉化為string

MongoDB里的_id欄位前四位是時間戳的16進製表示,通過Python可以很容易從_id中提取出時間戳來

def timestamp_from_objectid(objectid):

result = 0
try:
result = time.mktime(objectid.generation_time.timetuple())
except:
pass
return result

『伍』 怎樣將python中PyObject 類型轉換成c++中string類型

使用PyString_AsString(pyobj)函數,從PyObject指針裡面獲取字元串指針。
注意,上面的函數不適用與Unicode字元串。Unicode 字元串請另行參考Python C API編程手冊。

『陸』 可以使用Python讀取java寫入redis 的object數據,並解析嗎

-redis 本來就只支持存儲一些基本類型(數值,字元...)的。java將對象存儲在redis中是將對象序列化後的位元組數組存入redis的,所以你用python取到的redis中的數據時,會帶有特殊的前綴,表示序列化後java的類信息。java獲取這些數據的時候會有反序列的操作,所以不影響。但python取到數據後是無法解析的。
-Java 存儲與python共享數據時,應避免將String字元串當做對象進行序列化存儲,應直接以字元串的形式存儲,如果需要共享對象,對象轉化為json串存儲。
-另外spring的redisTemplate 進行Hash操作時,就算你存儲的是String類型的數據,也會被當做String對象序列化後存儲。所以 如果過要操作redis的hash結構,建議實例化一個Jedis客戶端進行操作。

『柒』 python 出現這個錯誤是什麼原因

python嘗試修改string的值(導致「TypeError: 'str' object does not support item assignment」) string是一種不可變的數據類型,該錯誤發生在如下代碼中: spam = 'I have a pet cat.' spam[13] = 'r' print(spam) 而你實際想要這樣做: spam =...

『捌』 python定義模型

學python的人都知道,python中一切皆是對象,如class生成的對象是對象,class本身也是對象,int是對象,str是對象,dict是對象...。所以,我很好奇,python是怎樣實現這些對象的?帶著這份好奇,我決定去看看python的源碼,畢竟源碼才是滿足自己好奇心最直接的方法。

在object.h文件中,定義了兩種數據結構PyObject和PyVarObject,代碼如下:

1 #define PyObject_HEAD 2 Py_ssize_t ob_refcnt; 3 struct _typeobject *ob_type; 4 5 #define PyObject_VAR_HEAD 6 PyObject_HEAD 7 Py_ssize_t ob_size; 8 9 typedef struct _object {10 PyObject_HEAD11 } PyObject;12 13 typedef struct {14 PyObject_VAR_HEAD15 } PyVarObject;

這兩種數據結構分別對應python的兩種對象:固定長度對象和可變長度對象。python中的所有對象都屬於這兩種對象中的一種,如int,float是固定長度對象,list,str,dict是可變長度對象。從上面兩種對象數據結構定義來看,可變長度對象和固定長度對象的頭都是PyObject結構體,也就是說python中所有對象的開頭都包含這個結構體,並且可以用PyObject *指針來訪問任何對象,這種訪問對象的方法在python的源碼中隨處可見。PyObject結構體包含兩個成員,ob_refcnt和ob_type指針。ob_refcnt用來表示對象被引用的次數,當ob_refcnt == 0時,這個對象會被立即銷毀;ob_type指針指向了一個_typeobject類型的結構體,表示對象所屬的類型,也就是生成該對象的類型,這其實很類似於面向對象中類與實例的關系,PyObject是某個類的實例,ob_type表示這個類。但與面向對象不同的是,ob_type本身也是個對象,我們來看下_typeobject的定義:

1 typedef struct _typeobject { 2 PyObject_VAR_HEAD 3 const char *tp_name; /*類型名 */ 4 Py_ssize_t tp_basicsize, tp_itemsize; /* 實例化對象的大小 */ 5 6 /* 標准方法 */ 7 8 destructor tp_dealloc; 9 printfunc tp_print;10 getattrfunc tp_getattr;11 setattrfunc tp_setattr;12 cmpfunc tp_compare;13 reprfunc tp_repr;14 15 /* 標准類(數值類,列表類,dict類)方法*/16 17 PyNumberMethods *tp_as_number;18 PySequenceMethods *tp_as_sequence;19 PyMappingMethods *tp_as_mapping;20 21 /* 其它標准方法*/22 23 hashfunc tp_hash;24 ternaryfunc tp_call;25 reprfunc tp_str;26 getattrofunc tp_getattro;27 setattrofunc tp_setattro;28 ...
29 } PyTypeObject;

從上面定義來看,_typeobject的開頭也包含了PyObject結構體,所以它也是一個對象,既然它也是一個對象,那麼按照面向對象的理解,它又是誰來生成的呢?答案是所有PyTypeObject對象都是通過PyType_Type來生成的,包括PyType_Type本身,因為PyType_Type也是PyTypeObject對象,有點繞。PyType_Type的定義是通過將PyType_Type聲明為全局靜態變數實現的,具體如下:

1 PyTypeObject PyType_Type = { 2 PyVarObject_HEAD_INIT(&PyType_Type, 0) 3 "type", /* tp_name */ 4 sizeof(PyHeapTypeObject), /* tp_basicsize */ 5 sizeof(PyMemberDef), /* tp_itemsize */ 6 (destructor)type_dealloc, /* tp_dealloc */ 7 0, /* tp_print */ 8 0, /* tp_getattr */ 9 0, /* tp_setattr */10 0, /* tp_compare */11 (reprfunc)type_repr, /* tp_repr */12 0, /* tp_as_number */13 0, /* tp_as_sequence */14 0, /* tp_as_mapping */15 (hashfunc)_Py_HashPointer, /* tp_hash */16 (ternaryfunc)type_call, /* tp_call */17 0, /* tp_str */18 (getattrofunc)type_getattro, /* tp_getattro */19 (setattrofunc)type_setattro, /* tp_setattro */20 0, /* tp_as_buffer */21 ...22 }

從PyType_Type定義來看,ob_type被初始化為它自己的地址,所以PyType_Type的類型就是自己。從python源碼實現來看,所有PyTypeObject的ob_type都會指向PyType_Type對象,所以PyType_Type是所有類型的類型,稱之為元類。python中定義了很多內建的類型對象,如PyInt_Type (int類型),PyStr_Type (str類型),PyDict_Type(dict類型) 類型對象,下面看下PyInt_Type類型的定義:

1 PyTypeObject PyInt_Type = { 2 PyVarObject_HEAD_INIT(&PyType_Type, 0) 3 "int", 4 sizeof(PyIntObject), 5 0, 6 (destructor)int_dealloc, /* tp_dealloc */ 7 (printfunc)int_print, /* tp_print */ 8 0, /* tp_getattr */ 9 0, /* tp_setattr */10 (cmpfunc)int_compare, /* tp_compare */11 (reprfunc)int_to_decimal_string, /* tp_repr */12 &int_as_number, /* tp_as_number */13 0, /* tp_as_sequence */14 0, /* tp_as_mapping */15 (hashfunc)int_hash, /* tp_hash */16 0, /* tp_call */17 ...18 };

從PyInt_Type定義來看,它主要包含了int數據類型相關的方法。PyInt_Type類型對象的初始化和PyType_Type類型類似,PyInt_Type類型的定義也是通過全局靜態變數的方式實現的,除了PyInt_Type了下,所有python內建類型都是以這種方式定義的。這些類型產生的對象都會共享這些類型對象,包括這些類型定義的方法。

在python中,怎樣查看對象的類型呢?有兩種方法,一種是直接type:

1 >>> x = 12 >>> type(x)3 <type 'int'>

另一種是通過對象的__class__屬性:

1 >>> x = 12 >>> type(x)3 <type 'int'>4 >>> x.__class__5 <type 'int'>

現在來看看int,str,dict這些類型的類型:1 <type 'int'>2 >>> type(int)3 <type 'type'>4 >>> type(str)5 <type 'type'>6 >>> type(dict)7 <type 'type'>8 >>> type(type)9 <type 'type'>從這個輸出來看,int,str,dict這些類型的類型都是type,這也印證了前面說的,所有類型都是通過元類type生成的。

『玖』 python怎麼將objectid轉為str

bson的話
比如,我的是MongoDB查詢出的id
導入bson模塊
for id in cursor:

id = id.get('_id',"空")
#此時的id類型為bson.objectid.ObjectId
id = id.__str__()
#此時的id類型為str
json的話
導入json模塊
JSON的mps()函數可以將python的各種數據類型轉換為字元串,loads()函數可以將相應的字元串轉換回python變數

『拾』 Python String和PyQt QString的區別

以下在python2.5和PyQt4.4.6 for python2.5環境下討論。

在python中有兩種與字元有關的類型:string object和Unicode object。

平時進行輸入輸出的一般都用string
object,當需要顯示一些特殊字元或者中文等文字時候,需要轉換為Unicode編碼。在PyQt中也有兩種字元類型與上面兩者對應:QByteArray和QString,主要是使用QString操作數據。

1) python string
object可以理解為一個接一個位元組的位元組組,至於表示什麼編碼,與表示文字有關,比如「python
string」,「中文」。注意它是有不同編碼區分的。

PyQt中與之對應的是QbyteArray,而不是Qstring。

A built-in string object (plain or Unicode) is a sequence of
characters used to store and represent text-based information
(plain strings are also sometimes used to store and represent
arbitrary sequences of binary bytes). (摘自《Python in a
NutShell》)

QByteArray can be used to store both raw bytes (including '"0's)
and traditional 8-bit '"0'-terminated.(摘自《PyQt手冊》)

2)Python Unicode
object可以理解為固定使用utf-16編碼的位元組組,其中英文和中文都使用兩個位元組(16位)來表示,如:u"Python
Unicode object"、u"中文"。
PyQt中與之對應的就是QString了。

Unicode string literals have the same syntax as other string
literals, with a u or U immediately before the leading quote.
(摘自《Python in a NutShell》)

Qt also provides the QString class to store string data. It stores
16-bit Unicode characters, making it easy to store
non-ASCII/non-Latin-1 characters in your
application.(摘自《PyQt手冊》)
QString stores a string of 16-bit QChars, where each QChar
corresponds one Unicode 4.0 character.(摘自《PyQt手冊》)

2 PyQt內部類型轉換

QString有
toAscii()、toUtf8()函數轉換為QByteArray類型,(這個基本不用,因為很少直接用QByteArray類型)有__init__
(self, QByteArray a)函數將QByteArray類型轉為QString。

3. Python string object和Python Unicode object相互轉換

1)Python string object是原始編碼是有區分的,通過 decode('原始編碼')
函數解碼得到通用utf16編碼即Python Unicode object。
>>>"python
string".decode('ascii')
或者
>>>"python
string".decode()
得到 u"python string"
因為默認按ascii解碼。
>>>"中文".decode('gbk')
得到 u""u4e2d"u6587" ,列印出來就是 中文 二字。(注意結果是2位元組一組,共兩組,對應兩個漢字)
又:"python string".decode('gkb') ,即按漢字來解碼,也可以得到 u"python
string",因為gbk編碼也支持英文字母;
但是"中文".decode('ascii') 即按ascii解碼是錯誤的,因為ascii編碼不支持漢字!

>>>
"dfdf".decode()
u'dfdf'
>>>
"dfdf".decode("ascii")
u'dfdf'
>>>
"dfdf".decode("gbk")
u'dfdf'
>>>
"中文".decode("gbk")
u'"u4e2d"u6587'
>>>print
"中文".decode("gbk")
中文
>>>
"中文".decode("gb2312")
u'"u4e2d"u6587'
>>>
"中文".decode("ascii")
Traceback (most recent call last):
File "<interactive input>", line 1,
in <mole>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd6 in
position 0: ordinal not in range(128)

2)Python Unicode object原始編碼固定是utf16,通過 encode('目的編碼') 編碼來得到Python
string object。
>>>u"unicode
string".encode()
或者
>>>u"unicode
string".encode('ascii')
得到
'unicode string',默認目的編碼為ascii。
>>>u"中文".encode("gbk")
得到'"xd4"xd0"xce"xc4',列印出來就是 中文。(注意結果是1位元組一組,共4組)

>>>
u"sdff".encode()
'sdff'
>>>
u"sdff".encode('ascii')
'sdff'
>>>
u"sdff".encode('gbk')
'sdff'
>>>
u"sdff".encode('gb2312')
'sdff'
>>>
u"中文".encode('gbk')
'"xd6"xd0"xce"xc4'
>>> print
u"中文".encode('gbk')
中文
>>>
u"中文".encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordin
al not in range(128)
注意:執行>>>
u"中文".encode('gbk')命令需要你的IDE支持gbk編碼,在官方shell下執行肯定沒問題,但如果你的IDE比如PyWin中文輸入異常,則可能報錯。

4. Python string object和Python Unicode object向QString的轉換。

Qt一般不直接操作QByteArray,只需關注Python string object和Python Unicode
object向QString的轉換。
很多關於PyQt4的英文書籍說:PyQt函數需要QString參數的地方都可以直接用Python string
object或者Python Unicode object,如果非要轉換可以直接用QtCore.QString()構造。比如《GUI
Programming with PyQt》,再如《PyQt手冊》:

Whenever PyQt expects a QString as a function argument, a Python
string object or a Python Unicode object can be provided instead,
and PyQt will do the necessary conversion automatically.

You may also manually convert Python string and Unicode objects to
QString instances by using the QString constructor as demonstrated
in the following code fragment:

qs1 = QtCore.QString("Converted Python string object")
qs2 = QtCore.QString(u"Converted Python Unicode object")

但可惜這只適用於英文即ascii編碼,對於中文則行不通!

直接的QString:
>>>
QtCore.QString('中文')
PyQt4.QtCore.QString(u'"xd6"xd0"xce"xc4')
>>> print
QtCore.QString('中文')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-3: ordin
al not in range(128)
>>>
>>>
QtCore.QString(u'中文')
PyQt4.QtCore.QString(u'"u4e2d"u6587')
>>> print
QtCore.QString(u'中文')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordin
al not in range(128)
>>>
因為它們都是默認按ascii編碼轉換!

GUI編程:
可以創建一個QTextEdit對象myTextEdit, 檢驗:
myTextEdit.append("中文")
或者
myTextEdit.append(u"中文")
或者
myTextEdit.append(QtCore.QString('中文'))
或者
myTextEdit.append(QtCore.QString(u'中文'))
你會發現顯示都是亂碼...因為它們都是默認按ascii編碼進行內部轉換得到QString相應utf16編碼的。

解決方法是:
利用unicode()函數顯示指定gb2312編碼進行中文編碼轉換,轉換後的Python Unicode
object則是可以直接作為QString參數代入用的:

>>> unicode('中文',
'gb2312', 'ignore')
u'"u4e2d"u6587'
>>> print
unicode('中文', 'gb2312', 'ignore')
中文
>>>

myTextEdit.append(unicode('中文', 'gb2312', 'ignore'))
#用以替代myTextEdit.append(u"中文")
或者多此一舉下:
myTextEdit.append(QtCore.QString(unicode('中文', 'gb2312',
'ignore')))
#用以替代myTextEdit.append(QtCore.QString(u'中文'))

5. QString向Python string object和Python Unicode object的轉換。

Python中需要用Python string object和Python Unicode
object的地方可就不一定可以直接用QString了!!!
QString向Python string object轉換可以理解,因為編碼不同。
QString向Python Unicode object的轉換?需要轉換嗎?不都是utf16編碼嗎?
QString是tuf16編碼,但是它的實現並非Python Unicode
object那樣直接的utf16碼,而實際是一個QChar串,每個QChar才對應unicode符,所以地位相當但並不相同。
許多英文書籍寫到:可以使用str()函數直接將QString轉換為Python string
object,可以使用unicode()直接將QString轉換為Python Unicode
object。如《PyQt手冊》:

In order to convert a QString to a Python string object use the
Python str() builtin. Applying str() to a null QString and an empty
QString both result in an empty Python string object.

In order to convert a QString to a Python Unicode object use the
Python unicode() builtin. Applying unicode() to a null QString and
an empty QString both result in an empty Python Unicode
object.

但同樣只適用於英文,具體見下面分別分析。
1)QString向Python Unicode object的轉換。
>>> from PyQt4 import
QtGui, QtCore
>>>
unicode(QtCore.QString('def'))
u'def'
>>> print
unicode(QtCore.QString('def'))
def

對於中文,unicode()必須要指定編碼後有效。(這樣也只針對直接的QString有效?對於Qt
GUI編程中,從QWidget取得的QString無效?)

>>> from PyQt4 import
QtGui, QtCore
>>>
unicode(QtCore.QString('中文'))
u'"xd6"xd0"xce"xc4'
>>> print
unicode(QtCore.QString('中文'))
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'gbk' codec can't encode character u'"xd6' in
position 0: il
legal multibyte sequence

指定原始編碼後:
>>>
unicode(QtCore.QString('中文'),'gbk','ignore')
u'"u4e2d"u6587'
>>> print
unicode(QtCore.QString('中文'),'gbk','ignore')
中文 TEST

熱點內容
c語言五子棋程序 發布:2025-01-27 12:58:43 瀏覽:156
win10流媒體伺服器怎麼搭建 發布:2025-01-27 12:58:04 瀏覽:383
組合公式的演算法 發布:2025-01-27 12:45:50 瀏覽:277
落櫻小屋哪裡下載安卓 發布:2025-01-27 12:35:13 瀏覽:71
微信伺服器IP跳轉 發布:2025-01-27 12:26:54 瀏覽:73
oracle自動備份腳本linux 發布:2025-01-27 12:21:40 瀏覽:936
pop伺服器密碼怎麼填 發布:2025-01-27 12:20:02 瀏覽:968
oraclesqlnumber 發布:2025-01-27 12:04:22 瀏覽:849
如何看三才配置數理暗示力 發布:2025-01-27 12:04:15 瀏覽:811
我的世界離線2b2t的伺服器 發布:2025-01-27 11:51:25 瀏覽:144