[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[特效代码] [已解决]批处理如何把中文转为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 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

1

评分人数

目的,学习批处理

TOP

直接
http://www.google.cn/search?hl=zh-CN&newwindow=1&q=心路历程
应该就可以了啊

TOP

...UTF-8编码...

TOP

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

百度是用ANSI编码,可用VBScript的 Asc 函数(逐个字符处理)。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 3楼 的帖子

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

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

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

js不太熟,可以跟bat混合编程吗?

TOP

  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
复制代码
1

评分人数

TOP

非常感谢。结果很正确!
还有个问题,我把它存为url.vbs
想把它在cmd 命令状态下运行。
c:\url.vbs 我爱bathome (就是把中文作为参数传给vbs)
处理结果返回给bat ,可以做吗。

TOP

以前写的,存为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
复制代码
1

评分人数

    • inittab: 太棒了,完全符合我的需要.PB + 5

TOP

::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是不一样的。

TOP

返回列表