【问题标题】:Encoding and Decoding in Node jsNode js中的编码和解码
【发布时间】:2020-05-31 14:09:36
【问题描述】:

我有一个字符串,我需要将其编码为“iso-8859-1”,然后我需要将其转换回可读字符串。

有没有办法在 node js 中原生地做到这一点?如果我将它编码为“iso-8859-1”,那么我是否需要使用它来解码它?

我可以在 .Net 中做到这一点

string encodedData = "VABpAG0AZQAgAHMAZQByAGUAaQBzAA==";
Encoding encoding = Encoding.GetEncoding("iso-8859-1"); // encoding in "iso-8859-1"
byte[] = decodedbuff = convert.FromBase64String(encodedData);   // getting buffer
result = encoding.GetString(decodedbuff);    //decoding

如何在node js中实现?

【问题讨论】:

    标签: javascript c# node.js .net


    【解决方案1】:

    您可以简单地从编码的 base64 字符串创建一个缓冲区,然后在缓冲区上使用 toString()latin1(iso-8859-1 是 nodejs 中的 latin1)来获取解码的字符串:

    const encoded = "VABpAG0AZQAgAHMAZQByAGUAaQBzAA==";
    const buffer = Buffer.from(encoded, 'base64');
    console.log(buffer.toString('latin1')); // prints T i m e   s e r e i s
    

    【讨论】:

    • 我已经尝试过这种方式,并且每个字符之间都有空格,例如“T i m e s e r e i s”。如果我将“latin1”更改为“utf16le”(每个字符有 2 个字节),那么它工作正常。但是当我在“iso-8859-1”中对其进行编码时,在解码时为什么它没有给出正确的结果?
    • 似乎转换为 VABpAG0AZQAgAHMAZQByAGUAaQBzAA== 的值是用 latin1 以外的东西编码的 -> 如果我在节点中将“Time sereis”转换为 base64,我会得到 VGltZSBzZXJlaXM=
    猜你喜欢
    • 2022-01-23
    • 2014-10-16
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多