【问题标题】:Windows tool to decode HTML entities in a file用于解码文件中的 HTML 实体的 Windows 工具
【发布时间】:2016-01-25 17:04:33
【问题描述】:

是否有适用于 Windows 的命令行/批处理脚本工具可用于将 HTML 授权(如  ℘‰)解码为可读的 UTF-8 文本?

我发现这个使用 javascript 的 Web 工具 (https://mothereff.in/html-entities) 可以做到这一点,但我需要从 Windows 批处理文件中完成。我知道令人惊叹的 JREPL.bat 实用程序,它将 javascript 合并到 Windows 命令外壳中以在文件中进行正则表达式替换。我只是找不到用于 HTML 实体转换的类似工具。

编辑:对于那些聪明的程序员,我希望你能编写一个批处理工具来执行 HTML 实体解码/编码,以帮助我和未来的读者寻找相同的解决方案。以下是我认为可以使用的 Github 页面:https://github.com/mathiasbynens/hehttps://github.com/mathiasbynens/mothereff.in/tree/master/html-entities

【问题讨论】:

    标签: javascript windows batch-file command-line


    【解决方案1】:

    您不需要大量的应用程序(如 JREPL.bat 或我自己的 FindRepl.bat)或复杂的程序来执行像这个一样简单的替换。下面的小批处理文件是一个替换 3 个 HTML 实体的示例:

    @set @a=0 // & cscript //nologo //E:JScript "%~F0" < input.txt & goto :EOF
    
    var rep = new Array();
    rep["&#xA9;"]   = "\u00A9";
    rep["&#xD306;"] = "\uD306";
    rep["&#x2603;"] = "\u2603";
    
    var f = new ActiveXObject("Scripting.FileSystemObject").CreateTextFile("output.txt", true, true);
    f.Write(WScript.Stdin.ReadAll().replace(/&#xA9;|&#xD306;|&#x2603;/g,function (A) {return rep[A]}));
    f.Close();
    

    输入.txt:

    Foo &#xA9; bar &#xD306; baz &#x2603; qux
    

    输出.txt:

    Foo © bar 팆 baz ☃ qux
    

    你只需要添加你想转换的字符等价...

    【讨论】:

    • 我不知道如何使用它。你能告诉我如何从 Windows 批处理文件中调用它吗?
    • 只需将代码复制到.BAT扩展名的文件中即可,例如:convert.bat;然后,通过键入其名称从命令提示符调用它:C:\Your\path&gt; convert.bat。您可以将代码中的input.txtoutput.txt 文件名修改为其他文件名,或者改用参数。要从另一个批处理文件调用此批处理文件,请使用 CALL 命令:call convert.bat
    • 如果问的不是太多,你能不能写一个相反的脚本来编码所有除了 0-127范围的ASCII字符使用这样的 js 代码到 HTML 实体:function a(b) { var c= ''; for(i=0; i&lt;b.length; i++){ if(b.charCodeAt(i)&gt;127){ c += '&amp;#' + b.charCodeAt(i) + ';'; }else{ c += b.charAt(i); } } document.forms.conversionForm.outputText.value = c; }?我认为使用这个概念,您不必枚举字符数组,因为实际上有数千个 unicode 字符。我在unicodetools.com/unicode/convert-to-html.php 上找到了它
    • 我打算编辑我​​的消息以澄清我需要转换为 HTML numeric 实体,但显然,编辑 5 分钟以上的旧消息是不允许。
    【解决方案2】:

    将 JScript 合并到批处理文件中很简单,因此您可以轻松编写自己的自定义混合 JScript/批处理脚本,其中包含在 https://github.com/mathiasbynens/he 找到的 he.js。

    但是使用您已经提到的JREPL.BAT tool 更简单。您可以使用 /JLIB 选项加载 he.js 代码,从而使 JREPL 可以访问所有 he(html-entities)功能。

    这是一个解码 test.txt 并覆盖原始文件的简单示例。

    jrepl "^.*" "he.decode($0)" /jlib "he.js" /f test.txt /o -
    

    这不是最有效的方法,但它可能足够快,而且确实很方便。

    这是另一个对 test.txt 中的每个字符(包括换行符)进行编码的示例,将结果写入 out.txt

    jrepl "^[\s\S]*" "he.encode($0,{encodeEverything:true})" /m /j /jlib he\he.js /f test.txt /o out.txt
    

    您应该研究他和 JREPL 的所有文档以发现所有可能性。

    示例中的正则表达式部分似乎更像是一个障碍而不是帮助。但是很容易想象,选择性地仅对输入文本的一部分进行编码是多么有用。或者您可以使用 JREPL /T 选项为不同的文本部分使用不同的编码选项。

    【讨论】:

    • 嗨@dbenham!如果问得不算多,您能否编写相反的 windows 批处理/jscript 混合,它可以将 除了 0-127 范围 ASCII 字符 的所有内容编码为数字 HTML 实体使用这样的 js 代码:function a(b) { var c= ''; for(i=0; i&lt;b.length; i++){ if(b.charCodeAt(i)&gt;127){ c += '&amp;#' + b.charCodeAt(i) + ';'; }else{ c += b.charAt(i); } } document.forms.conversionForm.outputText.value = c; }?我在unicodetools.com/unicode/convert-to-html.php 上找到了它,它看起来非常简单。我知道像这样的编码任务对你来说是微不足道的。提前谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2021-07-14
    • 2011-02-24
    • 2013-11-17
    • 2018-01-14
    相关资源
    最近更新 更多