返回列表 发帖

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

喜欢用批处理+wget 来抓网页资源, 主要是修改起来方便啊,不用编译.
   现在网页都是utf8编码,如果网址是 GET/POST 的话, 批处理的 ansi 编码 处理起来非常麻烦,
   于是花了点时间, 写了一个简单的小程序, 可以方便的将 ansi 字符串(变量)转 url编码.

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

评分人数

论坛上传太慢了,13KB传了几分钟.

TOP

本帖最后由 qazplm 于 2017-7-24 22:04 编辑

url编码一般有utf-8和gb2312两种,而且也不是所有的字符都需要转换
@echo off
powershell "[void][Reflection.Assembly]::LoadWithPartialName('System.Web');[Web.HttpUtility]::UrlEncode('黄江琴是谁',[Text.Encoding]::GetEncoding('utf-8'));"
pauseCOPY
1

评分人数

TOP

TOP

本帖最后由 happy886rr 于 2017-7-25 11:00 编辑

JS混编
1>1/* :
@cscript -nologo -e:jscript "%~f0"  %*&@exit /b %errorlevel%*/
try{
WScript.echo(encodeURIComponent(WScript.Arguments(0)));
}catch(e){
WScript.echo('Usage: juri [url]');
}COPY
C#混编
/*************************************************************************
@ECHO OFF&CLS&TITLE MINI CSHARP COMPILER BY HAPPY
for /f "delims=" %%a in ('dir /a-d /b /s "%systemroot%\Microsoft.NET\Framework\csc.exe"') do (
>nul "%%~a" /out:juri.exe "%~f0" && juri.exe
pause&exit/b
)
)
set/p=You needs Microsoft.NET!&exit/b
**************************************************************************/
/*************************************************************************
C# URL ENCODE TOOL, COPYRIGHT@2017~2019, VERSION 1.0
JURI.EXE
**************************************************************************/
using System;
namespace Juri
{
class JuriCore
{
static void Main(string[] argv)
{
if(argv.Length == 1)
{
Console.WriteLine(System.Web.HttpUtility.UrlEncode(argv[0]));
}
          else if(argv.Length == 2)
{
string enURL="";
if(String.Equals(argv[0], "--UTF8", StringComparison.CurrentCultureIgnoreCase))
{
enURL=System.Web.HttpUtility.UrlEncode(argv[1], System.Text.Encoding.UTF8);
}
else if(String.Equals(argv[0], "--GB2312", StringComparison.CurrentCultureIgnoreCase))
{
enURL=System.Web.HttpUtility.UrlEncode(argv[1], System.Text.Encoding.GetEncoding("GB2312"));
}
else{
Console.WriteLine("Unkonwn switch '{0}'", argv[0]);
}
Console.WriteLine(enURL);
}
else
{
Console.WriteLine("{0}"
, "Juri v1.0 - C# URL encode tool - Copyright (C) 2017-2019\n"
+ "Usage: juri ([--UTF8|--GB2312]) [URL]\n"
+ "\n"
+ "General options:\n"
+ "  --UTF8   Encode to UTF8\n"
+ "  --GB2312 Encode to GB2312\n"
+ "  --HELP   Show help information\n"
);
}
}
}
}COPY

TOP

perl -MURI::Escape -MEncode -e "print uri_escape(encode('utf8',decode('gbk','黄江琴')))"COPY
[url=][/url]

TOP

那就不要用批处理啦。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 Junyee 于 2017-7-25 06:35 编辑

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

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

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

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

这些方案,我还是倾向于
js/vbs ,因为 windows 自带解释器.
而 powershell 在xp 等系统上是没有的.

TOP

回复 3# qazplm


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

像这个URL.
http://www.ed2000.cc/search.aspx?SearchWord=黄江琴&pagesize=1
用ie打开会搜索不到,用chrome 则不会.

TOP

本帖最后由 523066680 于 2017-7-25 09:04 编辑

写一个C版本的转换工具是极好的。
不过那几个理由真是funny,总结起来就是 —— 沉浸在自己的小世界里不能自拔。
写了就写了,多一个选项,不需要解释这么多。
[url=][/url]

TOP

本帖最后由 老刘1号 于 2017-7-25 08:53 编辑

四楼不能运行说明你没有Word。
那就手动复制到剪切板呗~
Wscript.ECHO [UTF-8编码后文本二进制(使用0xHex表示)内容]
CS运行,在CMD中手动复制即可~

TOP

回复 8# Junyee


    我还是倾向于PowerShell,因为XP早就该淘汰啦
环境所限,需要使用 PowerShell 2.0 版本。

TOP

本帖最后由 Junyee 于 2017-7-25 17:18 编辑

回复 10# 523066680


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

在别的几个论坛,边回贴发些感想什么的,好像很多人也也这么做 ,成习惯了

TOP

返回列表