Views: 5
这是一个AutoIt脚本,用于将包含双字节字符的字符串转换为URL编码格式。这个功能在处理网络请求和数据传输时非常有用,尤其是当涉及到非ASCII字符集时。以下是该脚本的主要特点:
- 支持双字节字符的URL编码。
- 适用于AutoIt脚本语言。
- 包含两个主要函数:
URLEncode
和UnicodeToUTF8
。 URLEncode
函数负责将输入字符串转换为URL编码格式。UnicodeToUTF8
函数将单个Unicode字符转换为UTF-8编码。
如何使用
- 包含必要的AutoIt库文件。
- 定义测试字符串,该字符串可以包含双字节字符。
- 调用
URLEncode
函数进行URL编码。 - 使用
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