Javascript 如何从nodejs缓冲区中删除非法字符?

Javascript 如何从nodejs缓冲区中删除非法字符?,javascript,node.js,Javascript,Node.js,我从前端得到了一个csv文件的base64编码字符串。在后端,我将base64字符串转换为二进制,然后尝试将其转换为json对象 var csvDcaData = new Buffer(source, 'base64').toString('binary')//convert base64 to binary 问题是,用户界面正在发送一些非法字符,这些字符在纯csv中用户看不到。“ï»?这些字符附加在csv字段之一中 我想从base64的数据中删除这类字符,但在转换后,这些字符出现在缓冲区中

我从前端得到了一个csv文件的base64编码字符串。在后端,我将base64字符串转换为二进制,然后尝试将其转换为json对象

 var csvDcaData = new Buffer(source, 'base64').toString('binary')//convert base64 to binary
问题是,用户界面正在发送一些非法字符,这些字符在纯csv中用户看不到。“ï»?这些字符附加在csv字段之一中

我想从base64的数据中删除这类字符,但在转换后,这些字符出现在缓冲区中,我无法识别它们


可以通过任何方式从缓冲区检测此类字符。

源正在向您发送消息。消息由元数据和文本组成。消息的前几个字节可识别为元数据,因为它们是UTF-8编码的字节顺序标记(BOM)。这强烈表明文本是用UTF-8编码的。尽管如此,要阅读文本,您应该从发送者那里了解所使用的编码

是的,如果只想在文本中处理,BOM“字符”应该去掉。它们不是字符,因为它们不是文本的一部分。(不过,如果将字节解码为UTF-8,则它与代码点U+FEFF匹配。)

因此,尽管消息可能深奥,但它不包含非法字符,但实际上包含有用的元数据

此外,考虑到您没有剥离BOM表,您看到的是“ï»?而不是”" (U+FEFF零宽度不间断空格)表示您没有使用UTF-8对文本进行解码。这可能会导致数据丢失。除了编码文本外,没有文本。您必须始终知道并使用正确的编码


现在,
source
是一个JavaScript字符串(顺便说一下,它使用Unicode的UTF-16编码)。该字符串的内容是一条用Base64编码的消息。该消息是一个字节序列,是BOM和文本的UTF-8编码。您希望文本是一个JavaScript字符串。(文本恰好是某种形式的CSV。为此,您需要知道行尾、分隔符和文本限定符。)您和发件人有很多要讨论的内容。可能发件人已经记录了所有这些内容

const stripBom=require('strip-bom');

const original=“”你赢了一百万₹! 现在,您可以得到一个真实的消息源正在向您发送消息。消息由元数据和文本组成。消息的前几个字节可识别为元数据,因为它们是字节顺序标记(BOM)以UTF-8编码。这强烈表明文本是以UTF-8编码的。尽管如此,要阅读文本,您应该从发送者那里了解使用了哪种编码

是的,当只想在文本中处理时,应该去掉BOM“字符”。它们不是字符,因为它们不是文本的一部分。(不过,如果将字节解码为UTF-8,则它与代码点U+FEFF匹配。)

因此,尽管消息可能深奥,但它不包含非法字符,但实际上包含有用的元数据

此外,考虑到您没有剥离BOM表,您看到的是“ï»?而不是”" (U+FEFF零宽度不间断空格)表示您没有使用UTF-8对文本进行解码。这可能会导致数据丢失。除了编码文本外,没有文本。您必须始终知道并使用正确的编码


现在,
source
是一个JavaScript字符串(顺便说一下,它使用Unicode的UTF-16编码)。该字符串的内容是一条用Base64编码的消息。该消息是一个字节序列,是BOM和文本的UTF-8编码。您希望文本是一个JavaScript字符串。(文本恰好是某种形式的CSV。为此,您需要知道行尾、分隔符和文本限定符。)您和发件人有很多要讨论的内容。可能发件人已经记录了所有这些内容

const stripBom=require('strip-bom');

const original=“”你赢了一百万₹! 现在你可以得到一个真实的,我想你不想要
.toString('binary')
,而是
.toString('utf8')
(或者前端使用的任何编码)我想你不想要
.toString('binary')
,而是
.toString('utf8')
(或者前端使用的任何编码)