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

[格式转换] ansi 字符转 url编码

[复制链接]
发表于 2017-7-24 19:30:45 | 显示全部楼层 |阅读模式
喜欢用批处理+wget 来抓网页资源, 主要是修改起来方便啊,不用编译.
   现在网页都是utf8编码,如果网址是 GET/POST 的话, 批处理的 ansi 编码 处理起来非常麻烦,
   于是花了点时间, 写了一个简单的小程序, 可以方便的将 ansi 字符串(变量)转 url编码.

http://bcn.bathome.net/s/tool/index.html?key=a2u

评分

参与人数 2技术 +2 收起 理由
a2002 + 1 感谢分享
老刘1号 + 1 感谢分享

查看全部评分

 楼主| 发表于 2017-7-24 19:32:48 | 显示全部楼层
论坛上传太慢了,13KB传了几分钟.
发表于 2017-7-24 20:03:03 | 显示全部楼层
本帖最后由 qazplm 于 2017-7-24 22:04 编辑

url编码一般有utf-8和gb2312两种,而且也不是所有的字符都需要转换

  1. @echo off
  2. powershell "[void][Reflection.Assembly]::LoadWithPartialName('System.Web');[Web.HttpUtility]::UrlEncode('黄江琴是谁',[Text.Encoding]::GetEncoding('utf-8'));"
  3. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
老刘1号 + 1 Ps一行流

查看全部评分

发表于 2017-7-24 21:34:51 | 显示全部楼层
发表于 2017-7-24 23:01:20 | 显示全部楼层
本帖最后由 happy886rr 于 2017-7-25 11:00 编辑

JS混编

  1. 1>1/* :
  2. @cscript -nologo -e:jscript "%~f0"  %*&@exit /b %errorlevel%*/

  3. try{
  4.         WScript.echo(encodeURIComponent(WScript.Arguments(0)));
  5. }catch(e){
  6.         WScript.echo('Usage: juri [url]');
  7. }
复制代码
C#混编
  1. /*************************************************************************
  2. @ECHO OFF&CLS&TITLE MINI CSHARP COMPILER BY HAPPY
  3. for /f "delims=" %%a in ('dir /a-d /b /s "%systemroot%\Microsoft.NET\Framework\csc.exe"') do (
  4.                 >nul "%%~a" /out:juri.exe "%~f0" && juri.exe
  5.                 pause&exit/b
  6.         )
  7. )
  8. set/p=You needs Microsoft.NET!&exit/b
  9. **************************************************************************/

  10. /*************************************************************************
  11. C# URL ENCODE TOOL, COPYRIGHT@2017~2019, VERSION 1.0
  12. JURI.EXE
  13. **************************************************************************/
  14. using System;

  15. namespace Juri
  16. {
  17.         class JuriCore
  18.         {
  19.                 static void Main(string[] argv)
  20.                 {
  21.                         if(argv.Length == 1)
  22.                         {
  23.                                 Console.WriteLine(System.Web.HttpUtility.UrlEncode(argv[0]));
  24.                         }
  25.                          else if(argv.Length == 2)
  26.                         {
  27.                                 string enURL="";
  28.                                 if(String.Equals(argv[0], "--UTF8", StringComparison.CurrentCultureIgnoreCase))
  29.                                 {
  30.                                         enURL=System.Web.HttpUtility.UrlEncode(argv[1], System.Text.Encoding.UTF8);
  31.                                 }
  32.                                 else if(String.Equals(argv[0], "--GB2312", StringComparison.CurrentCultureIgnoreCase))
  33.                                 {
  34.                                         enURL=System.Web.HttpUtility.UrlEncode(argv[1], System.Text.Encoding.GetEncoding("GB2312"));
  35.                                 }
  36.                                 else{
  37.                                         Console.WriteLine("Unkonwn switch '{0}'", argv[0]);
  38.                                 }
  39.                                 Console.WriteLine(enURL);
  40.                         }
  41.                         else
  42.                         {
  43.                                 Console.WriteLine("{0}"
  44.                                         , "Juri v1.0 - C# URL encode tool - Copyright (C) 2017-2019\n"
  45.                                         + "Usage: juri ([--UTF8|--GB2312]) [URL]\n"
  46.                                         + "\n"
  47.                                         + "General options:\n"
  48.                                         + "  --UTF8   Encode to UTF8\n"
  49.                                         + "  --GB2312 Encode to GB2312\n"
  50.                                         + "  --HELP   Show help information\n"
  51.                                 );
  52.                         }
  53.                 }
  54.         }
  55. }
复制代码
发表于 2017-7-24 23:12:41 | 显示全部楼层
  1. perl -MURI::Escape -MEncode -e "print uri_escape(encode('utf8',decode('gbk','黄江琴')))"
复制代码
发表于 2017-7-24 23:28:51 | 显示全部楼层
那就不要用批处理啦。
 楼主| 发表于 2017-7-25 06:23:29 | 显示全部楼层
本帖最后由 Junyee 于 2017-7-25 06:35 编辑

谢谢大家.论坛看着冷清, 其实还是有不少老人潜伏啊!~

javascript 也能很方便的实现这类效果.
但是 cscript  支持 js 和 网页上的又不太一样,就没有尝试.

vbs 我基本上是不懂..
powershell 学了几个小时,也放弃了.
perl 好像体积比较大.
python 学的也忘掉了.

4楼 的贴子我看过,但好像运行有错,不知道怎么样,所以才花点时间用C写了这个.

这些方案,我还是倾向于
js/vbs ,因为 windows 自带解释器.
而 powershell 在xp 等系统上是没有的.
 楼主| 发表于 2017-7-25 06:30:55 | 显示全部楼层
回复 3# qazplm


powershell 果然强大!
实际上, 很多情况下 url code 并不需要人为操作, 应用在提交 get 的时候会自动转化.
如 wget 会自动转为成 ansi(gb2312)
但现在大部分网页都使用了 utf-8 , ansi 的 urlcode 就会出错,如:
  1. set keyword=黄江琴
  2. wget "http://www.ed2000.cc/search.aspx?SearchWord=%keyword%&pagesize=1"  -O "%TMPDIR%\search_1.html"
复制代码
以前在调试 php 的时候,发现 微软系的应用大部分默认是 ansi ,如IE.
而 chrome 在提交中文网页, 是自动转化为 utf-8 的.

像这个URL.
http://www.ed2000.cc/search.aspx?SearchWord=黄江琴&pagesize=1
用ie打开会搜索不到,用chrome 则不会.
发表于 2017-7-25 08:44:40 | 显示全部楼层
本帖最后由 523066680 于 2017-7-25 09:04 编辑

写一个C版本的转换工具是极好的。
不过那几个理由真是funny,总结起来就是 —— 沉浸在自己的小世界里不能自拔。
写了就写了,多一个选项,不需要解释这么多。
发表于 2017-7-25 08:46:53 | 显示全部楼层
本帖最后由 老刘1号 于 2017-7-25 08:53 编辑

四楼不能运行说明你没有Word。
那就手动复制到剪切板呗~
Wscript.ECHO [UTF-8编码后文本二进制(使用0xHex表示)内容]
CS运行,在CMD中手动复制即可~
发表于 2017-7-25 10:00:01 | 显示全部楼层
回复 8# Junyee


    我还是倾向于PowerShell,因为XP早就该淘汰啦
 楼主| 发表于 2017-7-25 17:15:09 | 显示全部楼层
本帖最后由 Junyee 于 2017-7-25 17:18 编辑

回复 10# 523066680


    好吧.
   知道了,这是技术论坛,,不是聊天论坛

在别的几个论坛,边回贴发些感想什么的,好像很多人也也这么做 ,成习惯了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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