最近工作需要,要完成乙個基於lotus domino的**。由於涉及混合語種問題,**編碼基調定為utf-8,而且其中有部分需要用lotusscprit**直接接收html form裡submit過來的資料。以前遇到這個問題都是想辦法繞開的,那時候沒時間,為了趕進度,只能這樣。這次專案時間較富裕,我決定吭一下,看看牙口尚好否。
目標:decode utf-8 form data in lotusscript agent.
google、baidu外加ibm lotus論壇,搜尋了一通,有
四、五段現成的**,經測試沒有乙個對的,想偷懶都不行了:(
轉變思路,查詢utf-8編碼規則,baidu上找到一篇關於utf-8的說明,很不錯,終於看懂了字元編碼到utf-8編碼的轉換規則。
原來utf-8編碼是將字元編碼通過一種轉換規則變成1~6位元組的編碼。
瀏覽器將form中的多位元組字元和一部分單字字元轉變成這種編碼,與其他單位元組字元連成字串,再把其中的空格用「+」代替,就成了在lotus agent中接收到的字串引數了。
由於lotusscript中uchr()函式最多只能轉換雙位元組字元,3、4位元組的字元就不做轉換了,保留在原字串中。
function utf8decode(s as string) as string
dim i as integer
dim tmp as string
dim c as string
tmp = ""
for i = 1 to len(s)
c = mid$(s, i, 1)
if c = "+" then
c = " "
elseif c = "%" then
c = mid$(s, i + 1, 2)
if (val("&h" & c) >= 0) and (val("&h" & c) <= val("&h7f")) then
c = uchr$("&h" & c)
i = i + 2
elseif (val("&h" & c) >= val("&hc0")) and (val("&h" & c) <= val("&hdf")) then
c = right(bin$(val("&h" & mid$(s, i + 1, 2))),5)
c = c & right(bin$(val("&h" & mid$(s, i + 4, 2))),6)
c = uchr$("&b" & c)
i = i + 5
elseif (val("&h" & c) >= val("&he0")) and (val("&h" & c) <= val("&hef")) then
c = right(bin$(val("&h" & mid$(s, i + 1, 2))),4)
c = c & right(bin$(val("&h" & mid$(s, i + 4, 2))),6)
c = c & right(bin$(val("&h" & mid$(s, i + 7, 2))),6)
c = uchr$("&b" & c)
i = i + 8
else
c = mid$(s, i, 3)
i = i + 2
end if
end if
tmp = tmp + c
next i
utf8decode = tmp
end function
在PHP中處理日期
有許多話題論壇又來了,話題很多人常常有困難。其中乙個問題是如何處理日期,將其轉換成不同的格式,時區問題,等等。本教程將試 決的許多常見問題與日期和時間相關的問題。包括如何在php中處理日期之前,我想談一下應該如何日期儲存在乙個資料庫中。具體我要談談mysql。因為這就是我最的經驗。也有其他dbms設...
在gsoap中處理編碼問題
在gsoap中,如果遇到編碼問題,首先利用下面這個函式設定gsoap的接收的編碼格式。如下例,把gsoap編碼設定為utf 8的格式 soap set mode p iasserver soap,soap c utfstring 因此,您只需要把編碼轉換為utf 8後傳遞給gsoap即可。例如 an...
在批處理中獲得日期
echo date 0,10 即可 在此處似乎是範圍標誌,具體用法,待考 考察結果在此 從set 中檢視到 顯示 設定或刪除 cmd.exe 環境變數。set variable string variable 指定環境變數名。string 指定要指派給變數的一系列字串。要顯示當前環境變數,鍵入不帶引...