2014-11-01 62 views
-2

默認情況下,找出StreamWriter使用沒有BOM的UTF-8。我理解使用UTF-8,但爲什麼沒有BOM? http://referencesource.microsoft.com/#mscorlib/system/io/streamwriter.cs爲什麼StreamWriter使用不含BOM的UTF-8將文本寫入文件?

+3

在utf8編碼文本中使用BOM [有爭議](https://github.com/Joyent公司/節點/問題/ 1918)。字節順序標記對於對字節順序敏感的編碼是必需的。像utf16和utf32一樣,但不是utf8。 Unicode標準也不要求它。 – 2014-11-01 20:12:33

+0

@HansPassant,BOM用於UTF-8在開始時表示文本流以UTF-8編碼。對於編碼爲2個或更多字節的符號很重要。如果沒有BOM啓發式分析,需要確定文件正在使用什麼字符編碼。沒有這種分析的應用程序可以將沒有BOM的文本視爲ASCII。 – muradovm 2014-11-01 20:23:10

+0

其中一個原因是,如果使用ASCII(偶然或錯誤)解碼文本,並且字符落入ASCII範圍,它將「正常工作」。這與他們希望對讀者最大限度寬容的評論是一致的。 – 2014-11-01 20:23:14

回答

2

因爲它是記錄這樣 - StreamWriter

的StreamWriter默認爲,除非另有指定使用UTF8Encoding的一個實例。這個UTF8Encoding的實例沒有字節順序標記(BOM),所以它的GetPreamble方法返回一個空字節數組。

+0

我猜這個文檔是基於代碼實現的。但我的問題是關於決定。不使用UTF-8中的BOM有什麼好處? – muradovm 2014-11-01 20:13:59

+0

漢斯已經爲您提供了許多鏈接之一,討論關於在UTF8流中使用BOM的價值的爭論。事實上,儘管他暗示所有C#程序員都認爲BOM中應該包含BOM,但可以說並不是所有人都同意這一點。對你的問題最明顯的答案是,.NET設計師認爲,默認情況下反對包含BOM的觀點比支持它的觀點更有說服力。 – 2014-11-01 21:35:38

相關問題