从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
。
答案 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中,并且违反规范,则可以通过将以下命令的输出传递给perl
或ruby
之一来修复它以上:
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
的转义序列中所述。