- 积分
- 18826
- 明经币
- 个
- 注册时间
- 2011-9-11
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2025-12-25 17:19:49
|
显示全部楼层
本帖最后由 dcl1214 于 2025-12-25 17:22 编辑
 - (defun $URLencode$
- (str / $URLencode-sc$ $URLencode-vbs$ STRS $URLencode3$)
- (defun $URLencode3$
- (str / $jz10->jz16$ $str->utf-8$ 16jzs str-new utf-8s)
- (defun $str->UTF-8$ (str / file_list fileget stream)
- (if (and (setq stream (vl-catch-all-apply
- 'vlax-create-object
- (list "Adodb.Stream")
- )
- )
- (not (vl-catch-all-error-p stream))
- )
- (progn
- (vlax-put-property stream 'Type 2)
- ; 1二进制读取 2文本模式读取
- (vlax-put-property stream 'Mode 3) ; 1-读,2-写,3-读写
- (vlax-put-property stream 'Charset "utf-8") ; 设置编码为UTF-8
- (vlax-invoke stream 'Open)
- (vlax-invoke stream 'WriteText str)
- (vlax-put-property stream 'Position 0) ; 将位置重置为起始位置
- (vlax-put-property stream 'Type 1)
- ; 1二进制读取 2文本模式读取
- (and (setq FileGet (Vlax-Invoke-Method stream 'Read nil))
- (setq FileGet (vl-catch-all-apply
- 'vlax-variant-value
- (list FileGet)
- )
- )
- (setq File_list (vlax-safearray->list FileGet))
- (setq File_list (cdddr File_list)) ;去除BOM
- )
- (vl-catch-all-apply 'vlax-release-object (list stream))
- )
- (print "$URLencode3$无法创建'Adodb.Stream'对象")
- )
- File_list
- )
- (defun $jz10->jz16$ (int)
- (cond ((< int 10)
- (itoa int)
- )
- ((<= 10 int 15)
- (chr (+ int 55))
- )
- (t
- (strcat
- ($jz10->jz16$ (/ int 16))
- ($jz10->jz16$ (rem int 16))
- )
- )
- )
- )
- (setq utf-8s ($str->UTF-8$ str))
- (setq 16jzs (mapcar (function (lambda (a) ($jz10->jz16$ a)))
- utf-8s
- )
- )
- (setq
- str-new
- (apply 'strcat
- (mapcar (function (lambda (x) (strcat "%" x))) 16jzs)
- )
- )
- (if str-new
- (setq str str-new)
- )
- str
- )
- (defun $URLencode-sc$ (str / SC url)
- ;($URLencode$ "213j 213 2 3 %20")
- ;这个方法写出来了,还没应用到具体场景,应该是没问题,20201112
- (if (or
- (and (setq SC
- (vl-catch-all-apply
- 'vlax-get-or-create-object
- (list
- "MSScriptControl.ScriptControl"
- )
- )
- )
- (not (vl-catch-all-error-p SC))
- )
- (and (setq SC
- (vl-catch-all-apply
- 'vlax-get-or-create-object
- (list
- "Aec32BitAppServer.AecScriptControl.1"
- )
- )
- )
- (not (vl-catch-all-error-p SC))
- )
- (and (setq SC
- (vl-catch-all-apply
- 'vlax-get-or-create-object
- (list
- "ScriptControl"
- )
- )
- )
- (not (vl-catch-all-error-p SC))
- )
- (and (setq SC
- (vl-catch-all-apply
- 'vlax-get-or-create-object
- (list
- "{e8540e26-d20e-483f-9fd5-a5a3553a7556}"
- )
- )
- )
- (not (vl-catch-all-error-p SC))
- )
- (and (setq SC
- (vl-catch-all-apply
- 'vlax-get-or-create-object
- (list
- "{0e59f1d5-1fbe-11d0-8ff2-00a0d10038bc}"
- )
- )
- )
- (not (vl-catch-all-error-p SC))
- )
- )
- (progn
- (vl-catch-all-apply
- 'vlax-put
- (list SC 'Language "JScript")
- )
- (setq url (vl-catch-all-apply
- 'vlax-invoke
- (list SC 'run "encodeURI" str)
- )
- )
- )
- )
- (if sc
- (vlax-release-object sc)
- )
- (IF (vl-catch-all-error-p url) ;如果出错
- (setq url nil)
- )
- (if url
- url
- str
- )
- )
- (defun $URLencode-vbs$
- (str / code *SCR DATA new)
- ;($URLencode$ "http://192.168.0.107:8848/download?filename=中国.png")
- (if STR
- (if (or
- *SCR
- (setq
- *SCR (vlax-create-object
- "Aec32BitAppServer.AecScriptControl.1"
- )
- )
- (setq *SCR (vlax-create-object "ScriptControl"))
- )
- (progn
- (vlax-put *SCR 'language "VBScript")
- (setq code
- "Function UTF8Encode(szString)
- Dim szChar,szTemp,szCode
- Dim szHex,szBin
- Dim iCount1,iCount2
- Dim iStrLen1,iStrLen2
- Dim lResult
- Dim lAscVal
- exclude=\"-_.!~*'();/?
&=+$,#\"
- szString = Trim(szString)
- iStrLen1 = Len(szString)
- For iCount1 = 1 To iStrLen1
- szChar = Mid(szString, iCount1, 1)
- lAscVal = AscW(szChar)
- If lAscVal >= &H0 And lAscVal <= &HFF Then
- If (lAscVal >= &H30 And lAscVal <= &H39) Or (lAscVal >= &H41 And lAscVal <= &H5A) Or (lAscVal >= &H61 And lAscVal <= &H7A) Or InStr(exclude,szChar) >0 Then
- szCode = szCode & szChar
- Else
- szCode = szCode & \"%\" & Hex(AscW(szChar))
- End If
- Else
- szHex = Hex(AscW(szChar))
- iStrLen2 = Len(szHex)
- For iCount2 = 1 To iStrLen2
- szChar = Mid(szHex, iCount2, 1)
- szBin = szBin & Mid(\"0000;0001;0010;0011;0100;0101;0110;0111;1000;1001;1010;1011;1100;1101;1110;1111;\", CLng(\"&H\" & szChar) * 5 + 1, 4)
- Next
- szTemp = \"1110\" & Left(szBin, 4) & \"10\" & Mid(szBin, 5, 6) & \"10\" & Right(szBin, 6)
- For iCount2 = 1 To 24
- If Mid(szTemp, iCount2, 1) = \"1\" Then
- lResult = lResult + 1 * 2 ^ (24 - iCount2)
- Else
- lResult = lResult + 0 * 2 ^ (24 - iCount2)
- End If
- Next
- szTemp = Hex(lResult)
- szCode = szCode & \"%\" & Left(szTemp, 2) & \"%\" & Mid(szTemp, 3, 2) & \"%\" & Right(szTemp, 2)
- End If
- szBin = vbNullString
- lResult = 0
- Next
- UTF8Encode = szCode
- End Function"
- )
- (if (and
- (not (vl-catch-all-error-p
- (vl-catch-all-apply
- 'vlax-invoke
- (list *SCR
- 'addcode
- code
- )
- )
- )
- )
- (not (vl-catch-all-error-p
- (setq new (vl-catch-all-apply
- 'vlax-invoke
- (list *SCR
- 'run
- "UTF8Encode"
- str
- )
- )
- )
- )
- )
- )
- ()
- (setq new nil)
- )
- (if *SCR
- (vlax-release-object *SCR)
- )
- )
- (progn (print "调用VBScript转码失败,组件未找到"))
- )
- )
- new
- )
- (if (and STR
- (setq strs (vl-string->list str))
- (vl-some (function (lambda (a)
- (> a 128)
- )
- )
- strs
- )
- )
- (or (setq url ($URLencode3$ str))
- (setq url ($URLencode-sc$ str))
- (setq url ($URLencode-vbs$ str))
- (setq url str) ;如果上面两个都转码失败了,直接返回原始字串
- )
- (setq url str)
- )
- url
- )
收集的
|
评分
-
查看全部评分
|