比方說,我有這個輸入一個文件:DecoderFallbackException麻煩正確的字符
「奶油甜甜圈,$ 1.00」
如果用戶上傳錯誤編碼爲ANSI文件和我解析它使用帶有UTF8編碼集的TextFieldParser()在無效字節上引發異常時,它將正確地通過異常。它會報告:
「無法將索引321中的字節[E8]從指定的代碼頁轉換爲Unicode。」
屬性「UnknownBytes」包含帶有單個條目[232]的字節數組。 232是E8的十進制等值。奇怪的是,我相信「è」應該是字節[2] {195,168}。
我想回報給用戶什麼字符造成的差異。
這樣做的最好方法是什麼?
如果我返回Encoding.UTF8.GetString(ex.UnknownBytes),它將返回Unicode替換字符而不是「è」。推測這是因爲「232」作爲單個字節是無效的。
我錯過了什麼?看起來我擁有所有需要幫助用戶的信息,但我無法進行溝通。
哎喲爲downvote。我認爲這對試圖理解在編碼異常中返回的字節數組含義的人有幫助。我強調我的回答在我的情況下適用於上述情況,因爲我的上下文中的Encoding.Default是Windows代碼頁1252,並且上傳到我的平臺的值很可能來自相同的代碼頁,因此我可以輸出一個可識別的值給最終用戶。因人而異。 – DuncanMack
我提高了你的答案,因爲我覺得你不配。但是,您的解決方案不是解決方案,它只能幫助調試(請參閱有問題的字符串)。 –