Board logo

标题: [特效代码] [已解决]批处理如何把中文转为URL编码 [打印本页]

作者: inittab    时间: 2009-10-17 09:07     标题: [已解决]批处理如何把中文转为URL编码

最近用批处理写一个自动网络搜索程序。英文的OK,但中文却出现一些麻烦,比如在google.cn 搜索“心的距离”,提交的地址是

http://www.google.cn/search?hl=zh-CN&newwindow=1&q=%E5%BF%83%E7%9A%84%E8%B7%9D%E7%A6%BB

其中的%E5%BF%83%E7%9A%84%E8%B7%9D%E7%A6%BB  其实是"心的距离" 的url 编码。

想请教各位高手,有没办法用批处理把中文字转为url编码。

[ 本帖最后由 inittab 于 2009-10-17 22:18 编辑 ]
作者: hlzj88    时间: 2009-10-17 10:49

工具
http://www.jz5u.com/soft/apply/conve/5892.html
作者: Seter    时间: 2009-10-17 11:34

直接
http://www.google.cn/search?hl=zh-CN&newwindow=1&q=心路历程
应该就可以了啊
作者: slore    时间: 2009-10-17 12:22

...UTF-8编码...
作者: zqz0012005    时间: 2009-10-17 12:43

google是用UTF-8编码,可用JavaScript的 encodeURI 方法。

百度是用ANSI编码,可用VBScript的 Asc 函数(逐个字符处理)。
作者: inittab    时间: 2009-10-17 17:39     标题: 回复 3楼 的帖子

多谢大家回复,的确google是可以直接用中文的,我不仅要从google.
还要从其他网站,它们必须用中文转成url 编码才可以作为key.  几个网点都是utf-8的。

因为要把它写到批处理中,所以只要命令行方式。

bat代码,vbs代码 都行, 或者有第三方支持命令行的那最好不过了。

js不太熟,可以跟bat混合编程吗?
作者: slore    时间: 2009-10-17 18:52

  1. MsgBox UTF8Encode("我是Slore")
  2. Public Function UTF8Encode(szString)
  3.     Dim szChar,szTemp,szCode
  4.     Dim szHex,szBin
  5.     Dim iCount1,iCount2
  6.     Dim iStrLen1,iStrLen2
  7.     Dim lResult
  8.     Dim lAscVal
  9.     szString = Trim(szString)
  10.     iStrLen1 = Len(szString)
  11.     For iCount1 = 1 To iStrLen1
  12.         szChar = Mid(szString, iCount1, 1)
  13.         lAscVal = AscW(szChar)
  14.         If lAscVal >= &H0 And lAscVal <= &HFF Then
  15.             If (lAscVal >= &H30 And lAscVal <= &H39) Or _
  16.                 (lAscVal >= &H41 And lAscVal <= &H5A) Or _
  17.                  (lAscVal >= &H61 And lAscVal <= &H7A) Then
  18.                 szCode = szCode & szChar
  19.             Else
  20.                 szCode = szCode & "%" & Hex(AscW(szChar))
  21.             End If
  22.         Else
  23.             szHex = Hex(AscW(szChar))
  24.             iStrLen2 = Len(szHex)
  25.             For iCount2 = 1 To iStrLen2
  26.                 szChar = Mid(szHex, iCount2, 1)
  27.                 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)
  28.             Next
  29.             szTemp = "1110" & Left(szBin, 4) & "10" & Mid(szBin, 5, 6) & "10" & Right(szBin, 6)
  30.             For iCount2 = 1 To 24
  31.                 If Mid(szTemp, iCount2, 1) = "1" Then
  32.                     lResult = lResult + 1 * 2 ^ (24 - iCount2)
  33.                     Else: lResult = lResult + 0 * 2 ^ (24 - iCount2)
  34.                 End If
  35.             Next
  36.             szTemp = Hex(lResult)
  37.             szCode = szCode & "%" & Left(szTemp, 2) & "%" & Mid(szTemp, 3, 2) & "%" & Right(szTemp, 2)
  38.         End If
  39.         szBin = vbNullString
  40.         lResult = 0
  41.     Next
  42.     UTF8Encode = szCode
  43. End Function
复制代码

作者: inittab    时间: 2009-10-17 20:17

非常感谢。结果很正确!
还有个问题,我把它存为url.vbs
想把它在cmd 命令状态下运行。
c:\url.vbs 我爱bathome (就是把中文作为参数传给vbs)
处理结果返回给bat ,可以做吗。
作者: cutebe    时间: 2009-10-17 21:06     标题: 以前写的,存为BAT,结果用FOR接收

  1. ::EC_URI.JS::编码URI
  2. @echo off
  3. set JSF="%TMP%\EC_URI.JS"
  4. echo=WScript.echo(encodeURIComponent(WScript.Arguments(0)));>%JSF%
  5. set/pSTR=请输入URI地址(或普通字串):
  6. cscript //nologo %JSF% "%STR%"
  7. pause
复制代码
  1. ::DC_URI.JS::解码URI
  2. @echo off
  3. set JSF="%TMP%\DC_URI.JS"
  4. echo=WScript.echo(decodeURIComponent(WScript.Arguments(0)));>%JSF%
  5. set/pURI=请输入URI地址(或有类似%%5D%%4C的字串):
  6. cscript //nologo %JSF% "%URI%"
  7. pause
复制代码

作者: Demon    时间: 2011-6-1 20:04

::EC_URI.JS::编码URI
@echo off
set JSF="%TMP%\EC_URI.JS"
echo=WScript.echo(encodeURIComponent(WScript.Arguments(0)));>%JSF%
set/pSTR=请输入URI地址(或普通字串):
cscript //nologo %JSF% "%STR%"
...
cutebe 发表于 2009-10-17 21:06

encodeURIComponent和urlencode是不一样的。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2