diff --git a/CUETools.Processor/CUEConfig.cs b/CUETools.Processor/CUEConfig.cs index 0151ce3a..b8fadde6 100644 --- a/CUETools.Processor/CUEConfig.cs +++ b/CUETools.Processor/CUEConfig.cs @@ -40,6 +40,7 @@ public class CUEConfig public bool embedLog; public bool extractLog; public bool alwaysWriteUTF8CUEFile; + public bool writeUTF8BOM; public bool fillUpCUE; public bool overwriteCUEData; public bool filenamesANSISafe; @@ -110,6 +111,7 @@ public CUEConfig() embedLog = true; extractLog = true; alwaysWriteUTF8CUEFile = false; + writeUTF8BOM = true; fillUpCUE = true; overwriteCUEData = false; filenamesANSISafe = true; @@ -197,6 +199,7 @@ public CUEConfig(CUEConfig src) embedLog = src.embedLog; extractLog = src.extractLog; alwaysWriteUTF8CUEFile = src.alwaysWriteUTF8CUEFile; + writeUTF8BOM = src.writeUTF8BOM; fillUpCUE = src.fillUpCUE; overwriteCUEData = src.overwriteCUEData; filenamesANSISafe = src.filenamesANSISafe; @@ -285,6 +288,7 @@ public void Save(SettingsWriter sw) sw.Save("EmbedLog", embedLog); sw.Save("ExtractLog", extractLog); sw.Save("AlwaysWriteUTF8CUEFile", alwaysWriteUTF8CUEFile); + sw.Save("WriteUTF8BOM", writeUTF8BOM); sw.Save("FillUpCUE", fillUpCUE); sw.Save("OverwriteCUEData", overwriteCUEData); sw.Save("FilenamesANSISafe", filenamesANSISafe); @@ -391,6 +395,7 @@ public void Load(SettingsReader sr) embedLog = sr.LoadBoolean("EmbedLog") ?? true; extractLog = sr.LoadBoolean("ExtractLog") ?? true; alwaysWriteUTF8CUEFile = sr.LoadBoolean("AlwaysWriteUTF8CUEFile") ?? false; + writeUTF8BOM = sr.LoadBoolean("WriteUTF8BOM") ?? true; fillUpCUE = sr.LoadBoolean("FillUpCUE") ?? true; overwriteCUEData = sr.LoadBoolean("OverwriteCUEData") ?? false; filenamesANSISafe = sr.LoadBoolean("FilenamesANSISafe") ?? true; diff --git a/CUETools.Processor/CUESheet.cs b/CUETools.Processor/CUESheet.cs index bdb2cb2c..c408f9c5 100644 --- a/CUETools.Processor/CUESheet.cs +++ b/CUETools.Processor/CUESheet.cs @@ -2387,7 +2387,7 @@ private int GetSampleLength(string path, out TagLib.File fileInfo) public static void WriteText(CUEConfig _config, string path, string text) { bool utf8Required = (_config.alwaysWriteUTF8CUEFile && Path.GetExtension(path) == ".cue") || (CUESheet.Encoding.GetString(CUESheet.Encoding.GetBytes(text)) != text); - var encoding = utf8Required ? Encoding.UTF8 : CUESheet.Encoding; + var encoding = utf8Required ? new UTF8Encoding(_config.writeUTF8BOM) : CUESheet.Encoding; // Preserve original UTF-16LE encoding of EAC log files, which contain a log checksum if ((text.StartsWith("Exact Audio Copy") || text.StartsWith("EAC extraction logfile")) && text.Contains("==== Log checksum")) encoding = Encoding.Unicode; diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index 98d8bfae..a7f9a531 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -784,7 +784,7 @@ private void WriteAudioFilesThread(object o) if (File.Exists(fullCueName)) throw new Exception("file already exists"); bool utf8Required = _profile._config.alwaysWriteUTF8CUEFile || (CUESheet.Encoding.GetString(CUESheet.Encoding.GetBytes(cueSheetContents)) != cueSheetContents); - StreamWriter sw1 = new StreamWriter(fullCueName, false, utf8Required ? Encoding.UTF8 : CUESheet.Encoding); + StreamWriter sw1 = new StreamWriter(fullCueName, false, utf8Required ? new UTF8Encoding(_profile._config.writeUTF8BOM) : CUESheet.Encoding); sw1.Write(cueSheetContents); sw1.Close(); BatchLog("created ok.", fullCueName);