找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 36270|回复: 9

[特效代码] [已解决]批处理如何把中文转为URL编码

[复制链接]
发表于 2009-10-17 09:07:06 | 显示全部楼层 |阅读模式
最近用批处理写一个自动网络搜索程序。英文的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 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-10-17 10:49:49 | 显示全部楼层
发表于 2009-10-17 11:34:34 | 显示全部楼层
直接
http://www.google.cn/search?hl=zh-CN&newwindow=1&q=心路历程
应该就可以了啊
发表于 2009-10-17 12:22:30 | 显示全部楼层
...UTF-8编码...
发表于 2009-10-17 12:43:57 | 显示全部楼层
google是用UTF-8编码,可用JavaScript的 encodeURI 方法。

百度是用ANSI编码,可用VBScript的 Asc 函数(逐个字符处理)。
 楼主| 发表于 2009-10-17 17:39:21 | 显示全部楼层

回复 3楼 的帖子

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

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

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

js不太熟,可以跟bat混合编程吗?
发表于 2009-10-17 18:52:06 | 显示全部楼层
  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
复制代码

评分

参与人数 1PB +10 收起 理由
Batcher + 10 乐于助人

查看全部评分

 楼主| 发表于 2009-10-17 20:17:38 | 显示全部楼层
非常感谢。结果很正确!
还有个问题,我把它存为url.vbs
想把它在cmd 命令状态下运行。
c:\url.vbs 我爱bathome (就是把中文作为参数传给vbs)
处理结果返回给bat ,可以做吗。
发表于 2009-10-17 21:06:20 | 显示全部楼层

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

评分

参与人数 1PB +5 收起 理由
inittab + 5 太棒了,完全符合我的需要.

查看全部评分

发表于 2011-6-1 20:04:50 | 显示全部楼层
::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是不一样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:09 , Processed in 0.021803 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表