为什么不起作用?
decodeURI('\n') => newline;
decodeURI("\\n") => '\n', thus presumably...
decodeURI(decodeURI("\\n")) // => gives '\n' instead of newline
但这是吗?
JSON.parse('"\\n"') // => newline
此处要点是能够构建\ *字符串,然后通过解码URI将其转换为实际字符。
如果可能的话,我想避免使用JSON.parse。
我意识到我的解决方法令人困惑。一个更好的问题是,要问decodeURI和JSON.parse如何将它们从字符串文字转换为解析的字符,以及是否还有更直接的东西。
答案 0 :(得分:2)
decodeURI('\n') => newline; thus presumably
在您的代码中,\n
是换行符,甚至不可以解码URI 。反斜杠在JavaScript的字符串文字中具有含义。
decodeURI(decodeURI("\\n")) // => gives '\n' instead of newline
在此示例中,您用另一个反斜杠转义了反斜杠。因此,您不是将换行符传递给decodeURI()
,而是传递了反斜杠字符和'n'字符的文本。它们在URI中都不具有特殊含义,因此,decodeURI()
的输出与其输入相同。这样做两次当然使零差。我真的不明白你的意思。
但这是吗?
JSON.parse('"\\n"') // => newline
同样,尝试解压缩它是您在这里所做的。第一个反斜杠转义下一个反斜杠,在字符串中留下实际的反斜杠。因此,实际字符串为"\n"
。如果您JSON.parse()
,则解析器首先会解释您正在处理字符串文字。然后,它将\n
解码为换行符。这就是为什么它只输出换行符的原因。
这里的意思是能够构建一个*字符串,然后通过decodeURI将其转换为实际字符。
decodeURI
与此无关。
答案 1 :(得分:1)
这是有原因的:
decodeURI(decodeURI("\\n"));
不提供换行符,但是这样做:
JSON.parse('"\\n"');
这是因为\n
实际上不是URI组件(如果换行符是URI编码的,则看起来像%0A
而不是\n
),还因为它实际上已转义。
以下是一些示范:
演示1:decodeURI("\n")
:
var newline = decodeURI("\n");
console.log("Line One" + newline + "Line Two");
您可以在上方看到Line One
和Line Two
之间的控制台中有换行符。
演示2:decodeURI(decodeURI("\\n"))
:
var newline = decodeURI(decodeURI("\\n"));
console.log("Line One" + newline + "Line Two");
在这里,我们可以看到解码时转义的换行符(\\n
)只是换行符-newline
字面意思是字符串"\n"
,不是换行符。我们可以在下一个演示中看到这一点的证明:
演示3:typeof decodeURI("\\n")
:
var newline = decodeURI("\\n");
console.log("Line One" + newline + "Line Two");
console.log(typeof newline);
在这里我们看到decodeURI("\\n")
仅返回字符串\n
,由于未知原因,无法两次使用decodeURI
来解码未知字符,如您在此处看到的那样:
演示4:decodeURI(decodeURI("\\n"))
:
var newline = decodeURI("\\n");
var temp = decodeURI(newline);
console.log("Line One" + newline + "Line Two");
newline = temp;
console.log("Line One" + newline + "Line Two");
在这里我们可以看到newline
和temp
几乎是同一件事-字符串"\n"
。
此代码有一个原因:
decodeURI("\n");
实际上也返回换行符-这是因为在使用decodeURI
之前,"\n"
已经是换行符,因此decodeURI
是多余的。看到这个:
var newlineString = "\n";
var newline = decodeURI(newlineString);
console.log("Line One" + newlineString + "Line Two");
console.log("Line One" + newline + "Line Two");
在这里,两行都由换行符分隔,这意味着"\n"
实际上根本没有被解码-您完全不需要decodeURI
。
希望这对您有所帮助!
进一步阅读: