簡體   English   中英

如何從Node.js緩沖區中刪除非法字符?

[英]How to remove illegal characters from nodejs buffer?

我從前端得到了csv文件的base64編碼字符串。 在后端,我將base64字符串轉換為二進制,然后嘗試將其轉換為json對象。

 var csvDcaData = new Buffer(source, 'base64').toString('binary')//convert base64 to binary

問題是,Ui正在發送一些非法字符,其中的on字段對於普通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 = "¡You win one million ₹! Now you can get a real 🚲";
const base64String = Buffer.from("\u{FEFF}" + original, "utf-8").toString("base64");
console.log(base64String);

const decodedString = 
    stripBom(Buffer.from(base64String, "base64").toString("utf-8"));

console.log(decodedString);
console.log(original === decodedString);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM