2 回答

TA貢獻1831條經驗 獲得超9個贊
您的示例是 PDF 文件。PDF 文件不是文本文件,不應作為文本文件處理。如果更改行結尾,這將更改文件中不同對象的偏移量,從而損壞 PDF 文件。更糟糕的是,如果 PDF 文件中存在二進制流(例如字體、圖像等),則會破壞流的內容,并可能導致無法對其進行解碼。
要解決此問題,請確保將 PDF 文件作為二進制文件進行讀取和寫入。

TA貢獻1789條經驗 獲得超8個贊
好的,UTF-8 規范并不包含字節數據范圍內所有位代碼的字符,其他語言(例如 PHP)通過添加完成字節代碼映射的特殊非 UTF-8 字符來解決此問題,但事實并非如此在 JavaScript 中
所以這是 JavaScript 的限制,它不會告訴你它已經命中了一個字節碼,它無法反序列化,這會突出顯示發生了問題,它只是跳過該字節并移動到下一個字節,從而破壞了你的數據并隱藏腐敗發生的原因。
這意味著您不能在 JavaScript 中使用 UTF-8 編碼器對包含不支持的字節碼之一的任何內容進行編碼,要解決此問題,可以選擇將字節轉換為十六進制字符串,然后使用它來解碼在服務器端進行序列化,這會導致一定程度的數據膨脹,因為您使用 2 個字節發送一個字節(盡管這比嘗試對字節數組進行編碼要少得多),但由于 2 個字母的十六進制字符串映射所有字節范圍值意味著二進制數據不會損壞,并且可以安全地用于基于文本的數據序列化(例如通過 JavaScript 的 JSON)
- 2 回答
- 0 關注
- 185 瀏覽
添加回答
舉報