2 回答

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

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