;内置文件 FileInstall, ascii.txt, ascii.txt file := FileOpen("ascii.txt", "r") ascii := file.Read() file.Close() ;初始化0x00-0xFF的字节 Loop { if A_Index > 256 Break StringMid, out, ascii, %A_Index%, 1 SetFormat, IntegerFast, hex hex := A_Index-1 StringReplace, hex, hex, 0x, , All SetFormat, IntegerFast, d Asc_%hex% := out } urlencode(string){ StringLen, len, string Loop { if A_Index > %len% Break SetFormat, IntegerFast, hex ;运算结果为HEX StringMid, out, string, %A_Index%, 1 hex := Asc(out) ;获取单字节ascii值 hex := 0xFF-hex ;0xFF-当前值 StringReplace, hex, hex, 0x, , All ;去掉0x SetFormat, IntegerFast, d ;改回十进制 StringLen, len2, hex ;hex长度 if len2 = 1 hex = 0%hex% ;补位 StringLeft, l, hex, 1 ;前后交换 StringRight, r, hex, 1 hex = %r%%l% content = %content%`%%hex% } Return content } ;解码函数 urldecode(string){ StringSplit, var, string, `% ;用%分割 Loop { if A_index > %var0% Break hex := var%A_Index% ;取出变量 if A_Index > 1 { StringLen, len2, hex if len2 = 1 hex = 0%hex% StringLeft, l, hex, 1 StringRight, r, hex, 1 hex = %r%%l% hex = 0x%hex% SetFormat, IntegerFast, hex ;运算结果为HEX hex := 0xFF-hex StringReplace, hex, hex, 0x, , All asc_var := Asc_%hex% SetFormat, IntegerFast, d content = % content asc_var } } return content } ;去%版本 urlencode2(string){ StringLen, len, string Loop { if A_Index > %len% Break SetFormat, IntegerFast, hex ;运算结果为HEX StringMid, out, string, %A_Index%, 1 hex := Asc(out) ;获取单字节ascii值 hex := 0xFF-hex ;0xFF-当前值 StringReplace, hex, hex, 0x, , All ;去掉0x SetFormat, IntegerFast, d ;改回十进制 StringLen, len2, hex ;hex长度 if len2 = 1 hex = 0%hex% ;补位 StringLeft, l, hex, 1 ;前后交换 StringRight, r, hex, 1 hex = %r%%l% content = %content%%hex% } Return content } ;解码函数 urldecode2(string){ Loop { if string = Break StringLeft, hex, string, 2 ;取出变量 StringTrimLeft, string, string, 2 StringLen, len2, hex if len2 = 1 hex = 0%hex% StringLeft, l, hex, 1 StringRight, r, hex, 1 hex = %r%%l% hex = 0x%hex% SetFormat, IntegerFast, hex ;运算结果为HEX hex := 0xFF-hex StringReplace, hex, hex, 0x, , All asc_var := Asc_%hex% SetFormat, IntegerFast, d content = % content asc_var } return content } ;测试 a := urlencode2("以读取方式打开含有 UTF-8 或 UTF-16 字节顺序标记(BOM)的文件时,会把文件指针放置到这个标志后来从输出中排除 BOM。因此,在刚刚打开这样的文件时 File.Position 可能为 3 或 2。") b := urldecode2(a) MsgBox, 编码:`n%a%`n解码:`n%b%