Board logo

标题: [格式转换] ansi 字符转 url编码 [打印本页]

作者: Junyee    时间: 2017-7-24 19:30     标题: ansi 字符转 url编码

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

http://bcn.bathome.net/s/tool/index.html?key=a2u
作者: Junyee    时间: 2017-7-24 19:32

论坛上传太慢了,13KB传了几分钟.
作者: qazplm    时间: 2017-7-24 20: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号    时间: 2017-7-24 21:34

写过个类似的:http://www.bathome.net/thread-43919-1-1.html
作者: happy886rr    时间: 2017-7-24 23:01

本帖最后由 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. }
复制代码

作者: 523066680    时间: 2017-7-24 23:12

  1. perl -MURI::Escape -MEncode -e "print uri_escape(encode('utf8',decode('gbk','黄江琴')))"
复制代码

作者: codegay    时间: 2017-7-24 23:28

那就不要用批处理啦。
作者: Junyee    时间: 2017-7-25 06:23

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

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

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

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

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

这些方案,我还是倾向于
js/vbs ,因为 windows 自带解释器.
而 powershell 在xp 等系统上是没有的.
作者: Junyee    时间: 2017-7-25 06:30

回复 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 则不会.
作者: 523066680    时间: 2017-7-25 08:44

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

写一个C版本的转换工具是极好的。
不过那几个理由真是funny,总结起来就是 —— 沉浸在自己的小世界里不能自拔。
写了就写了,多一个选项,不需要解释这么多。
作者: 老刘1号    时间: 2017-7-25 08:46

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

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

回复 8# Junyee


    我还是倾向于PowerShell,因为XP早就该淘汰啦
作者: Junyee    时间: 2017-7-25 17:15

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

回复 10# 523066680


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

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




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