天天看點

C#儲存檔案為無BOM的utf8格式

如圖所示,發現用C#的 File.WriteAllLines 方法,無論怎麼設定,最終生成的檔案都是 PC utf8,也就是CRLF,用SVN進行送出的時候,顯示左側為utf8,右側為utf8 BOM檔案,甚是蛋疼。

最後的解決方法:

File.WriteAllText(strLuaFilePath, string.Join("\n", fileContentList.ToArray()), new System.Text.UTF8Encoding(false));

稍微普及一下常見的檔案編碼格式,以utf8、BOM為例

C#儲存檔案為無BOM的utf8格式

BOM 在檔案頭三位插入了“EF BB BF“

同樣是Utf8,在Windows、Unix、Mac下卻并不相同(回車CR ASCII碼 13 — \r,換行 LF ASCII碼 10 — \n,是以 CRLF — \0xD \0xA)。

平台

行尾結束符

Windows

CRLF —— \0xD \0xA,使用 回車 + 換行

Unix

LF —— \0xA,表示句尾,隻使用換行

Mac

CR —— \0xD,隻使用回車

CR —— Carriage-Return 回車(ASCII 13 \r)

LF —— Line-Feed 換行(ASCII 10 \n)

Visual Studio好像預設就是帶BOM的,通常我們約定送出的*.cs檔案全部是無BOM的utf8檔案。

繼續閱讀