使用Linux工具将\ u003c转换为<字符

时间:2019-06-01 16:15:54

标签: linux shell iconv

从ajax调用中,我得到了如下信息:

{"d":"\u003cdiv class=\"popup_title\"\u003eBENTELER Autótechnika Kft.\u003c/div\u003e\u003cdiv style=\"font-size:10pt;font-weight:bold;\"\u003e8060 Mór, Akai út 5.

我想将其转换为“可用”格式,因此\u0003c将只是一个<字符。

ajax调用的标头说这是一个iso-8859-2编码(内容类型:text / plain; charset = iso-8859-2),但是我不确定。

我尝试将iconv用于很多选项,但是没有运气。

有趣的是,例如此站点:

https://www.online-toolz.com/tools/text-unicode-entities-convertor.php

毫无用处,但是我无法找出“ from encoding”应该是什么。

我很乐意使用iconv

3 个答案:

答案 0 :(得分:1)

字符集只是ASCII。这些是使用的转义码,例如通过JavaScript(和Python)。

如果您从AJAX调用中获得的值是有效的JSON(大概是这样),请使用JSON工具将其提取。

bash$ jq -r .d <<\:
{"d":"\u003cdiv class=\"popup_title\"\u003eBENTELER Autótechnika Kft.\u003c/div\u003e\u003cdiv style=\"font-size:10pt;font-weight:bold;\"\u003e8060 Mór, Akai út 5."}
:
<div class="popup_title">BENTELER Autótechnika Kft.</div><div style="font-size:10pt;font-weight:bold;">8060 Mór, Akai út 5.

答案 1 :(得分:0)

最简单的方法是使用您所选择的语言的JSON解析器,它将其转换为适当的数据结构并取消转义。您将看到一个表示U + 003C的Unicode转义,它是<字符。 JSON解析器通常会跳过尖括号,因为它们在HTML和XML中具有特殊含义,转义它们意味着JSON可以从字面上插入到这些类型的文档中。

或者,如果您想从命令行中转义它们而不对其进行处理,则可以将其通过管道传递给Perl或Ruby,如下所示:

perl -pe 's/\\u([0-9a-f]+)/"\u{$1}"/ge;'

ruby -pe '$_.gsub!(/\\u([0-9a-f]+)/) { |m| m.to_i(16).chr }'

请注意,您从服务器获得的编码可能是红色鲱鱼。 JSON必须为Unicode,并且服务器可能配置错误。如果您确定数据确实在ISO-8859-2中,并且违反规范,则可以通过将以下命令的输出传递给perlruby之一来修复它以上:

iconv -f ISO-8859-2 -t UTF-8

答案 2 :(得分:0)

您可以使用Bash printf%b格式指令:

$ encoded='{"d":"\u003cdiv class=\"popup_title\"\u003eBENTELER Autótechnika Kft.\u003c/div\u003e\u003cdiv style=\"font-size:10pt;font-weight:bold;\"\u003e8060 Mór, Akai út 5.'
$ printf -v decoded '%b\n' "$encoded"
$ printf '%s\n' "$decoded"
{"d":"<div class=\"popup_title\">BENTELER Autótechnika Kft.</div><div style=\"font-size:10pt;font-weight:bold;\">8060 Mór, Akai út 5.

从手册:

  

%b
  使printf以与echo -e相同的方式扩展相应参数中的反斜杠转义序列(请参见Bash Builtins)。


就像查尔斯在评论中指出的那样,%b不仅限于Bash的printf,还包括required by POSIX;另一方面,\uHHHH转义的解释仅在Bash中发生,如echo的转义序列中所述。