Unicode控制項的字串引數問題

2021-04-06 11:35:47 字數 922 閱讀 9442

寫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位元組來表示字元。而且這個位元組實際上...