|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
『楼 主』:
[已解决]VBS调用IE进UTF8论坛,中文编码无法登陆
自己做了个登论坛小号的程序如下(用户和密码正确):
Set regwsh=createobject("wscript.shell")
Dim Wsh,cookies
Set Wsh = WScript.CreateObject("WScript.Shell")
cookies=regwsh.regread ("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies")
regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies","C:\\Documents and Settings\\All Users\\Cookies\\我是马甲"
Wsh.Run "IEXPLORE.EXE http://bbs.dp168.com/logging.php ... ime=0&username=鎴戞槸椹敳&password=15239776",,False
wscript.sleep 3000
regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies",cookies
Set Wsh=NoThing
WScript.quit
本程序利用IE或其它浏览器启动时只检查一次cookies的原理来实现多个IE窗口同时登录多个用户功能。其中下面这句的乱码是被转换过后的用户名“我是马甲”:
Wsh.Run "IEXPLORE.EXE http://bbs.dp168.com/logging.php ... ime=0&username=鎴戞槸椹敳&password=15239776",,False
使用了批处理生成vbs只能生成ansi编码。而这次的论坛要求使用utf8编码(一些论坛是),所以当户名是中文时老是出错,英文用户名时不会出错。怎样能把ANSI编码的转成utf8呢?vbs只能使用ANSI代码,一用UTF8就出错,临时解决方案是用一个ANSI文本、一个UTF8文本,在调用IE的字符串里使用转换过后的UTF8的字符串,但这样做任然有很多中文出现问号,使过程无法完成,比如用户名为“一个会员”时,转成UTF8是“涓€涓細鍛?”,这个问号的出现使用户无法登陆,有没有好办法呢?
[ Last edited by 9zhmke on 2009-7-8 at 15:16 ]
|
|
2009-7-8 12:37 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
|
2009-7-8 13:11 |
|
|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
『第
3 楼』:
这是两个不相干的问题,如果不改注册表里的cookies,是不可以同时登两个以上的号的,不信你在本论坛试就知道了。
...你句子里这个后面的%??是怎么来的呢?
[ Last edited by 9zhmke on 2009-7-8 at 13:21 ]
|
|
2009-7-8 13:19 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
4 楼』:
你没有看我的标题么?
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-7-8 13:43 |
|
|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
『第
5 楼』:
看了,vbs的文件如果用utf文件根本就不能执行。不知道怎么才能在里面弄成utf8。如果可以转换成三字节格式的%数据就好了。
[ Last edited by 9zhmke on 2009-7-8 at 14:10 ]
|
|
2009-7-8 13:45 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
6 楼』:
记事本用过没?
简单方法用专用播放器。。。
要用系统的方法就新建记事本,写 我是马甲
然后另存为 utf8编码名字叫1.txt
没用16进制查看器怎么看呢?
新建一个文本文档写000000000000000
UTF8编码1个汉字转3个字节,你打3(记事本UTF编码头)+12个0
然后保存为2.txt
然后打开CMD
运行:
fc /b 1.txt 2.txt
会得到2列信息,一列是1的编码,一列30(0的编码)
所以。。。。
还是推荐找个专门工具转吧。。。
其实貌似。。。
很多网页你提交都可以看到。。。比如吧,类似google
你查找下"我是马甲"看下IE的URL就知道了
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-7-8 14:11 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
7 楼』:
专用播放器。。。
专用编码转换器。。。
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-7-8 14:42 |
|
|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by slore at 2009-7-8 02:42 PM:
专用编码转换器。。。 |
|
不会全手工操作吧? 我的目的是根据一个用户名密码清单来生成这么几百个vbs。
如果一个直接在地址栏用javascript:alert(encodeURI('我是马甲'))就可以查出来,多了还不清楚怎么弄。继续查资料中....
[ Last edited by 9zhmke on 2009-7-8 at 14:59 ]
|
|
2009-7-8 14:46 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
9 楼』:
那就自己写呗
MsgBox UTF8Encode("我是马甲")
Public Function UTF8Encode(szString)
Dim szChar
Dim szTemp
Dim szCode
Dim szHex
Dim szBin
Dim iCount1
Dim iCount2
Dim iStrLen1
Dim iStrLen2
Dim lResult
Dim lAscVal
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) 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
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-7-8 15:07 |
|
|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
『第
10 楼』:
刚试了可以了,太谢谢了,就是要这个效果呢
|
|
2009-7-8 15:14 |
|
|
9zhmke
中级用户
积分 355
发帖 99
注册 2003-1-6
状态 离线
|
『第
11 楼』:
把生成程序一起发上来,给大家省去调试的麻烦:
其中涉及到的LUNTAN2.TXT是马甲存放文件,格式为用户名+空格+密码,空格为任意个但是用户名和密码中不能有空格
@echo off
set menu=42
dir *./b|find "字母"&&for /f %%i in ('dir /b *.') do if not %%i==保留 rd /s /q %%i>nul 2>nul
set ch=1
set hz=1
set ch_count=0
set hz_count=0
setlocal enabledelayedexpansion
for /f "tokens=1,2" %%i in (LUNTAN2.TXT) do (
set ansi=temp
echo 正在处理:“%%i”密码为“%%j”
echo Set regwsh=createobject^("wscript.shell"^) >%%i.vbs
>>%%i.vbs echo Dim Wsh,bbs,cookies
>>%%i.vbs echo Set Wsh = WScript.CreateObject^("WScript.Shell"^)
>>%%i.vbs echo cookies=regwsh.regread ^("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies"^)
>>%%i.vbs echo regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies","C:\\Documents and Settings\\All Users\\Cookies\\%%i"
>>%%i.vbs echo bbs=UTF8Encode^("%%i"^)
>>%%i.vbs echo user="IEXPLORE.EXE http://bbs.dp168.com/logging.php?action=login&loginsubmit=true&cookietime=0&username="^&bbs^&"&password=%%j"
>>%%i.vbs echo Wsh.Run user,,False
>>%%i.vbs echo wscript.sleep 3000
>>%%i.vbs echo regwsh.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Cookies",cookies
>>%%i.vbs echo Set Wsh=NoThing
>>%%i.vbs echo WScript.quit
>>%%i.vbs echo Public Function UTF8Encode^(szString^)
>>%%i.vbs echo Dim szChar,szTemp,szCode,szHex,szBin,iCount1,iCount2,iStrLen1,iStrLen2,lResult,lAscVal
>>%%i.vbs echo szString = Trim^(szString^)
>>%%i.vbs echo iStrLen1 = Len^(szString^)
>>%%i.vbs echo For iCount1 = 1 To iStrLen1
>>%%i.vbs echo szChar = Mid^(szString, iCount1, 1^)
>>%%i.vbs echo lAscVal = AscW^(szChar^)
>>%%i.vbs echo If lAscVal ^>= ^&H0 And lAscVal ^<= ^&HFF Then
>>%%i.vbs echo If ^(lAscVal ^>= ^&H30 And lAscVal ^<= ^&H39^) or ^(lAscVal ^>= ^&H41 And lAscVal ^<= ^&H5A^) or ^(lAscVal ^>= ^&H61 And lAscVal ^<= ^&H7A^) Then
>>%%i.vbs echo szCode = szCode ^& szChar
>>%%i.vbs echo Else
>>%%i.vbs echo szCode = szCode ^& "%%" ^& Hex(AscW^(szChar^)^)
>>%%i.vbs echo End If
>>%%i.vbs echo Else
>>%%i.vbs echo szHex = Hex^(AscW^(szChar^)^)
>>%%i.vbs echo iStrLen2 = Len^(szHex^)
>>%%i.vbs echo For iCount2 = 1 To iStrLen2
>>%%i.vbs echo szChar = Mid^(szHex, iCount2, 1^)
>>%%i.vbs echo 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^)
>>%%i.vbs echo Next
>>%%i.vbs echo szTemp = "1110" ^& Left^(szBin, 4^) ^& "10" ^& Mid^(szBin, 5, 6^) ^& "10" ^& Right^(szBin, 6^)
>>%%i.vbs echo For iCount2 = 1 To 24
>>%%i.vbs echo If Mid^(szTemp, iCount2, 1^) = "1" Then
>>%%i.vbs echo lResult = lResult + 1 * 2 ^^ ^(24 - iCount2^)
>>%%i.vbs echo Else: lResult = lResult + 0 * 2 ^^ ^(24 - iCount2^)
>>%%i.vbs echo End If
>>%%i.vbs echo Next
>>%%i.vbs echo szTemp = Hex^(lResult^)
>>%%i.vbs echo szCode = szCode ^& "%%" ^& Left^(szTemp, 2^) ^& "%%" ^& Mid^(szTemp, 3, 2^) ^& "%%" ^& Right^(szTemp, 2^)
>>%%i.vbs echo End If
>>%%i.vbs echo szBin = vbNullString
>>%%i.vbs echo lResult = 0
>>%%i.vbs echo Next
>>%%i.vbs echo UTF8Encode = szCode
>>%%i.vbs echo End Function
if "%%i" geq "阿" set chhz=汉字!hz!\ & set /a hz_count=hz_count+1&set /a hz=hz_count / menu + 1
if "%%i" leq "阿" set chhz=英文!ch!\ & set /a ch_count=ch_count+1&set /a ch=ch_count / menu + 1
if not exist !chhz! md !chhz!
echo move %%i.vbs !chhz!,汉字计数=!hz_count!,汉字=!hz!,字符计数=!ch_count!,字符=!ch!.
move %%i.vbs !chhz! >nul 2>nul
)
|
|
2009-7-8 16:13 |
|
|