我使用讀取檔案
File.ReadAllText(..., Encoding.ASCII);
根據檔案 [MSDN] (強調我的),
此方法嘗試根據位元組順序標記的存在自動檢測檔案的編碼。可以檢測編碼格式UTF-8 和 UTF-32(大端和小端)。
但是,在我的情況下,ASCII 檔案錯誤地開始0xFE 0xFF并檢測到 UTF-16(可能是大端,但我沒有檢查)。
uj5u.com熱心網友回復:
根據File[referencesource]它使用 StreamReader:
private static String InternalReadAllText(String path, Encoding encoding, bool checkHost)
{
...
using (StreamReader sr = new StreamReader(path, encoding, true, StreamReader.DefaultBufferSize, checkHost))
return sr.ReadToEnd();
}
并且記錄了帶有 5 個引數 [MSDN] 的 StreamReader 多載也支持 UTF-16
如果檔案以適當的位元組順序標記開頭,它會自動識別 UTF-8、little-endian Unicode、big-endian Unicode、little-endian UTF-32 和 big-endian UTF-32 文本。否則,將使用用戶提供的編碼。
(強調我的)
由于File.ReadAlltext()應該并記錄在案以檢測 Unicode BOM,因此它也檢測 UTF-16 可能是個好主意。但是,檔案是錯誤的,應該更新。我提交了問題 #7515。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/391705.html
