我正在嘗試解碼一個壓縮的 json 檔案,該檔案被拖放(拖放檔案)到我的 Flutter web 應用程式中,但是在從檔案中獲取正確的文本時遇到了一些挑戰。
例如,該檔案包含以下行:“Cond\u00c3\u00a9 Nast”
這應該是康泰納仕。我有點了解字符編碼,但這讓我很困惑。
這就是我目前解壓縮、utf8 解碼和最后 json 解碼檔案的方式。我正在使用存檔包進行解壓縮。
ArchiveFile theFile = otherFiles.first;
final fileString = Utf8Decoder().convert(theFile.content);
Iterable l = json.decode(fileString);
我將如何從這個輸入 JSON 檔案字串中列印正確的字符?這是編碼不正確的問題嗎?還是我的實施有問題?
uj5u.com熱心網友回復:
正如評論中所討論的,我懷疑theFile.content在較早的步驟中編碼不正確,并且它是通過 UTF-8 編碼器發送的兩次。您可以通過在十六進制編輯器中打開檔案并檢查其位元組來驗證這一點。或者,在 Dart 中您可以這樣做print(theFile.content);,或者,如果您更喜歡以十六進制查看位元組值,則可以使用print([for (var byte in theFile.content) byte.toRadixString(16)]);.
如果您無法控制生成該檔案的任何內容,則應該向這樣做的人投訴。同時,您可以嘗試通過兩次通過 UTF-8 解碼器輸入內容來消除損壞。 utf.decode/Utf8Decoder().convert期望 a List<int>,因此您不能String直接向他們提供錯誤編碼的內容。
void main() {
var badString = 'Cond\u00c3\u00a9 Nast';
var goodString = utf8.decode(badString.runes.toList());
print(goodString); // Prints: Condé Nast
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468628.html
