Autoit URL编码函数 – 支持双字节字符

Views: 5

这是一个AutoIt脚本,用于将包含双字节字符的字符串转换为URL编码格式。这个功能在处理网络请求和数据传输时非常有用,尤其是当涉及到非ASCII字符集时。以下是该脚本的主要特点:

  • 支持双字节字符的URL编码。
  • 适用于AutoIt脚本语言。
  • 包含两个主要函数:URLEncodeUnicodeToUTF8
  • URLEncode函数负责将输入字符串转换为URL编码格式。
  • UnicodeToUTF8函数将单个Unicode字符转换为UTF-8编码。

如何使用

  1. 包含必要的AutoIt库文件。
  2. 定义测试字符串,该字符串可以包含双字节字符。
  3. 调用URLEncode函数进行URL编码。
  4. 使用ConsoleWrite函数输出编码结果。

示例代码

以下是一个简单的示例,展示了如何使用这些函数对一个包含双字节字符的URL进行编码:

; 测试的原始字符串,包含双字节字符
Local $sOriginalURL = "http://xyx115.com/2023/08/06/使用批处理脚本修改服务器密码/"

; 浏览器转码后的URL
Local $sBrowserEncodedURL = 'http://xyx115.com/2023/08/06/%e4%bd%bf%e7%94%a8%e6%89%b9%e5%a4%84%e7%90%86%e8%84%9a%e6%9c%ac%e4%bf%ae%e6%94%b9%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%af%86%e7%a0%81/'

; 对原始URL进行编码
Local $sEncodedURL = URLEncode($sOriginalURL)

; 输出编码结果
ConsoleWrite("原始访问地址: " & $sOriginalURL & @CRLF)
ConsoleWrite("浏览器编码之后的URL: " & $sBrowserEncodedURL & @CRLF)
ConsoleWrite("自定义函数编码的URL: " & $sEncodedURL & @CRLF)




; 函数名称: URLEncode
; 功能描述: 将字符串编码为URL编码格式,包括双字节字符
; 输入参数: $sInput - 需要编码的字符串
; 返回值: 编码后的字符串
; 作者: 迷路轮回
; 创建日期: 2024-03-04
; 最后修改日期: 2024-03-05
; 修改说明: 增强了注释的详细性和代码的健壮性
Func URLEncode($sInput)
    ; 初始化编码后的字符串变量
    Local $sEncoded = ""
    ; 初始化字符代码和十六进制代码变量
    Local $iCharCode, $sHexCode
    ; 遍历输入字符串的每个字符
    For $i = 1 To StringLen($sInput)
        ; 获取当前字符的ASCII码值
        $iCharCode = AscW(StringMid($sInput, $i, 1))
        ; 判断字符是否为保留字符或不需要编码的字符
        If ($iCharCode >= 48 And $iCharCode <= 57) Or ($iCharCode >= 65 And $iCharCode <= 90) Or ($iCharCode >= 97 And $iCharCode <= 122) Or StringInStr("-_.~!*'();:@&=+$,/?#[]", Chr($iCharCode)) Then
            ; 直接添加到编码后的字符串
            $sEncoded &= Chr($iCharCode)
        Else
            ; 调用UnicodeToUTF8函数将字符编码为UTF-8格式
            $sHexCode = UnicodeToUTF8($iCharCode)
            ; 添加编码后的字符到编码后的字符串
            $sEncoded &= $sHexCode
        EndIf
    Next
    ; 返回编码后的字符串
    Return $sEncoded
EndFunc

; 函数名称: UnicodeToUTF8
; 功能描述: 将Unicode字符编码为UTF-8格式
; 输入参数: $iUnicode - Unicode字符的码值
; 返回值: UTF-8编码后的字符串
; 作者: 迷路轮回
; 创建日期: 2024-03-04
; 最后修改日期: 2024-03-05
; 修改说明: 增强了注释的详细性
Func UnicodeToUTF8($iUnicode)
    ; 初始化UTF-8编码后的字符串变量
    Local $sUTF8 = ""
    ; 根据Unicode码值的范围进行不同的编码处理
    If $iUnicode < 0x80 Then
        ; 如果码值小于0x80,直接转换为十六进制并添加百分号
        $sUTF8 = "%" & StringLower(Hex($iUnicode, 2))
    ElseIf $iUnicode < 0x800 Then
        ; 如果码值小于0x800,进行双字节编码
        $sUTF8 = "%" & StringLower(Hex(BitAND(BitShift($iUnicode, 6), 0x1F) + 0xC0, 2))
        $sUTF8 &= "%" & StringLower(Hex(BitAND($iUnicode, 0x3F) + 0x80, 2))
    Else
        ; 如果码值大于或等于0x800,进行三字节编码
        $sUTF8 = "%" & StringLower(Hex(BitAND(BitShift($iUnicode, 12), 0x0F) + 0xE0, 2))
        $sUTF8 &= "%" & StringLower(Hex(BitAND(BitShift($iUnicode, 6), 0x3F) + 0x80, 2))
        $sUTF8 &= "%" & StringLower(Hex(BitAND($iUnicode, 0x3F) + 0x80, 2))
    EndIf
    ; 返回UTF-8编码后的字符串
    Return $sUTF8
EndFunc

控制台输出

原始访问地址: http://xyx115.com/2023/08/06/使用批处理脚本修改服务器密码/
浏览器编码之后的URL: http://xyx115.com/2023/08/06/%e4%bd%bf%e7%94%a8%e6%89%b9%e5%a4%84%e7%90%86%e8%84%9a%e6%9c%ac%e4%bf%ae%e6%94%b9%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%af%86%e7%a0%81/
自定义函数编码的URL: http://xyx115.com/2023/08/06/%e4%bd%bf%e7%94%a8%e6%89%b9%e5%a4%84%e7%90%86%e8%84%9a%e6%9c%ac%e4%bf%ae%e6%94%b9%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%af%86%e7%a0%81/
+>09:13:46 AutoIt3.exe 结束.rc:0
+>09:13:46 AccAu3Wrapper 完成.
>Exit code: 0    Time: 0.376

发表评论