寫unicode控制項時發現的傳字串引數的問題:
問題描述:
unicode的ocx,屬性引數text,型別:bstr。
控制項的原始碼(vc中)
afx_msg void settext(lpctstr lpsztext)
vb呼叫1:
dim strtest as string
strtest = text1.text 『text1文字框為空
if not isnull(strtest) then
testocx2221.stringtest = strtest
end if
結果:
settext中lpsztext是null。
vb呼叫2:
dim strtest as string
strtest = ""
if not isnull(strtest) then
testocx2221.stringtest = strtest
end if
結果:
settext中lpsztext不為null,得到指向空串的有效指標。
因此:上述呼叫1時:
當控制項的處理程式直接呼叫了cstring的 == 或 !=,那就
有問題了,因為cstring這兩個操作符不支援null,會出錯。
也就是呼叫了不支空指標的操作。
好吧,還是採用保險的做法吧: 加多一句:
if(lpsztext==null) lpsztext = _t("");
很奇怪:
不知道vb的兩種呼叫為啥會傳出不同的值。沒明白。
至於為什麼ansi不會有問題,可能是因為vb呼叫ansi的控制項時,
需要對字串進行內部的轉換(由unicode轉ansi),而去除了可能為
空指標的情況。
原始字串 Unicode
原始字串以r開頭,可以在原始字串中放入任何字元,但不能以反斜線 結尾,用來防止反斜線轉義!在普通字串中,反斜線 會轉義,在字串中通常不能直接加入的內容。如 print c nowhere c owhere要輸出c nowhere,必須加反斜槓轉義。print c nowhere c nowhere ...
unicode字串轉換
需求 把乙個字串中 uffff的字串變為字串。因為網上找了很多轉換,一般都是正則匹配,然後轉換,但是經常是會報錯,都不能很完美的解決。所以自己謝了乙個轉換.把含義 uffff 的十六進製制字串轉換為字串 public class unicodeutils 把含義 uffff的十六進製制字串解析為字串...
Python str字串和unicode字串
這就需要給出符號 二進位制之間的對映關係,而且必須是一一對映 即給定乙個符號,機器有而且有唯一的二進位制對應。根據字元得到二進位制表示是編碼過程 encode 根據二進位制表示得到字元是解碼過程 decode 剛開始的時候,給出了ascii標準,用乙個8bits位元組來表示字元。而且這個位元組實際上...