Add new encoding "UTF-8 without BOM" (#3979)

* Add new encoding "UTF-8 without BOM"

* Fix command line converter

* Fix parameter names (codacy issues)

* Fix missing else statement - thx  xylographe :)
This commit is contained in:
Nikolaj Olsson 2020-02-09 10:49:26 +01:00 committed by GitHub
parent 39ab2e0dca
commit 0f28d058cc
17 changed files with 262 additions and 174 deletions

View File

@ -543,5 +543,20 @@ namespace Nikse.SubtitleEdit.Core
return Path.GetTempPath() + Guid.NewGuid() + extension;
}
public static void WriteAllText(string fileName, string contents, TextEncoding encoding)
{
if (encoding.DisplayName == TextEncoding.Utf8WithoutBom)
{
var outputEnc = new UTF8Encoding(false); // create encoding with no BOM
using (var file = new StreamWriter(fileName, false, outputEnc)) // open file with encoding
{
file.Write(contents);
}
}
else
{
File.WriteAllText(fileName, contents, encoding.Encoding);
}
}
}
}

View File

@ -1160,7 +1160,7 @@ namespace Nikse.SubtitleEdit.Core
}
}
public static Encoding GetEncodingFromFile(string fileName, bool skipAnsiauto = false)
public static Encoding GetEncodingFromFile(string fileName, bool skipAnsiAuto = false)
{
var encoding = Encoding.Default;
@ -1220,7 +1220,7 @@ namespace Nikse.SubtitleEdit.Core
{
encoding = Encoding.UTF8;
}
else if (couldBeUtf8 && Configuration.Settings.General.DefaultEncoding == Encoding.UTF8.WebName)
else if (couldBeUtf8 && Configuration.Settings.General.DefaultEncoding.StartsWith("UTF-8", StringComparison.Ordinal))
{ // keep utf-8 encoding if it's default
encoding = Encoding.UTF8;
}
@ -1228,7 +1228,7 @@ namespace Nikse.SubtitleEdit.Core
{ // keep utf-8 encoding for xml files with utf-8 in header (without any utf-8 encoded characters, but with only allowed utf-8 characters)
encoding = Encoding.UTF8;
}
else if (Configuration.Settings.General.AutoGuessAnsiEncoding && !skipAnsiauto)
else if (Configuration.Settings.General.AutoGuessAnsiEncoding && !skipAnsiAuto)
{
return DetectAnsiEncoding(buffer);
}

View File

@ -696,7 +696,6 @@ $HorzAlign = Center
public string DefaultSubtitleFormat { get; set; }
public string DefaultEncoding { get; set; }
public bool AutoConvertToUtf8 { get; set; }
public bool WriteUtf8Bom { get; set; }
public bool AutoGuessAnsiEncoding { get; set; }
public string SystemSubtitleFontNameOverride { get; set; }
public int SystemSubtitleFontSizeOverride { get; set; }
@ -849,9 +848,8 @@ $HorzAlign = Center
SubtitleBackgroundColor = Color.White;
CenterSubtitleInTextBox = false;
DefaultSubtitleFormat = "SubRip";
DefaultEncoding = Encoding.UTF8.WebName;
DefaultEncoding = TextEncoding.Utf8WithBom;
AutoConvertToUtf8 = false;
WriteUtf8Bom = true;
AutoGuessAnsiEncoding = true;
ShowRecentFiles = true;
RememberSelectedLine = true;
@ -1759,9 +1757,9 @@ $HorzAlign = Center
//too slow... :( - settings = Deserialize(settingsFileName); // 688 msecs
settings = CustomDeserialize(settingsFileName); // 15 msecs
if (settings.General.AutoConvertToUtf8)
if (settings.General.AutoConvertToUtf8 && !settings.General.DefaultEncoding.StartsWith("UTF-8", StringComparison.Ordinal))
{
settings.General.DefaultEncoding = Encoding.UTF8.WebName;
settings.General.DefaultEncoding = "UTF-8 with BOM";
}
}
catch (Exception exception)
@ -2085,12 +2083,6 @@ $HorzAlign = Center
settings.General.AutoConvertToUtf8 = Convert.ToBoolean(subNode.InnerText);
}
subNode = node.SelectSingleNode("WriteUtf8Bom");
if (subNode != null)
{
settings.General.WriteUtf8Bom = Convert.ToBoolean(subNode.InnerText);
}
subNode = node.SelectSingleNode("AutoGuessAnsiEncoding");
if (subNode != null)
{
@ -6309,7 +6301,6 @@ $HorzAlign = Center
textWriter.WriteElementString("DefaultSubtitleFormat", settings.General.DefaultSubtitleFormat);
textWriter.WriteElementString("DefaultEncoding", settings.General.DefaultEncoding);
textWriter.WriteElementString("AutoConvertToUtf8", settings.General.AutoConvertToUtf8.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("WriteUtf8Bom", settings.General.WriteUtf8Bom.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("AutoGuessAnsiEncoding", settings.General.AutoGuessAnsiEncoding.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("SystemSubtitleFontNameOverride", settings.General.SystemSubtitleFontNameOverride);
textWriter.WriteElementString("SystemSubtitleFontSizeOverride", settings.General.SystemSubtitleFontSizeOverride.ToString(CultureInfo.InvariantCulture));

63
libse/TextEncoding.cs Normal file
View File

@ -0,0 +1,63 @@
using System;
using System.Text;
namespace Nikse.SubtitleEdit.Core
{
public class TextEncoding : IEquatable<Encoding>, IEquatable<string>
{
public const string Utf8WithBom = "UTF-8 with BOM";
public const string Utf8WithoutBom = "UTF-8 without BOM";
public const int Utf8WithBomIndex = 0;
public const int Utf8WithoutBomIndex = 1;
public Encoding Encoding { get; }
public string DisplayName { get; }
public TextEncoding(Encoding encoding, string displayName)
{
if (displayName != null)
{
Encoding = Encoding.UTF8;
DisplayName = displayName;
}
else
{
Encoding = encoding;
DisplayName = encoding.CodePage + ": " + encoding.EncodingName;
}
}
public bool IsUtf8 => DisplayName == Utf8WithBom || DisplayName == Utf8WithoutBom;
public override string ToString()
{
return DisplayName;
}
public bool Equals(string other)
{
return !ReferenceEquals(other, null) && (
Encoding.WebName.Equals(other, StringComparison.OrdinalIgnoreCase) ||
Encoding.EncodingName.Equals(other, StringComparison.OrdinalIgnoreCase) ||
DisplayName.Equals(other, StringComparison.OrdinalIgnoreCase) ||
Encoding.CodePage.ToString().Equals(other));
}
public bool Equals(Encoding other)
{
return !ReferenceEquals(other, null) && Encoding.CodePage.Equals(other.CodePage);
}
public override bool Equals(object obj)
{
var item = obj as TextEncoding;
return !ReferenceEquals(item, null) && Equals(item.Encoding);
}
public override int GetHashCode()
{
return Encoding.CodePage.GetHashCode();
}
}
}

View File

@ -39,14 +39,14 @@ namespace Nikse.SubtitleEdit.Forms
public ListViewItem Item { get; set; }
public Subtitle Subtitle { get; set; }
public SubtitleFormat Format { get; set; }
public Encoding Encoding { get; set; }
public TextEncoding Encoding { get; set; }
public string Language { get; set; }
public string Error { get; set; }
public string FileName { get; set; }
public string ToFormat { get; set; }
public SubtitleFormat SourceFormat { get; set; }
public List<IBinaryParagraph> BinaryParagraphs { get; set; }
public ThreadDoWorkParameter(bool fixCommonErrors, bool multipleReplace, bool fixRtl, bool splitLongLinesActive, bool autoBalance, bool setMinDisplayTimeBetweenSubtitles, ListViewItem item, Subtitle subtitle, SubtitleFormat format, Encoding encoding, string language, string fileName, string toFormat, SubtitleFormat sourceFormat, List<IBinaryParagraph> binaryParagraphs)
public ThreadDoWorkParameter(bool fixCommonErrors, bool multipleReplace, bool fixRtl, bool splitLongLinesActive, bool autoBalance, bool setMinDisplayTimeBetweenSubtitles, ListViewItem item, Subtitle subtitle, SubtitleFormat format, TextEncoding encoding, string language, string fileName, string toFormat, SubtitleFormat sourceFormat, List<IBinaryParagraph> binaryParagraphs)
{
FixCommonErrors = fixCommonErrors;
MultipleReplaceActive = multipleReplace;
@ -724,7 +724,7 @@ namespace Nikse.SubtitleEdit.Forms
DialogResult = DialogResult.Cancel;
}
private Encoding GetCurrentEncoding()
private TextEncoding GetCurrentEncoding()
{
return UiUtil.GetTextEncodingComboBoxCurrentEncoding(comboBoxEncoding);
}
@ -1494,7 +1494,7 @@ namespace Nikse.SubtitleEdit.Forms
}
for (int i = 0; i < 3; i++)
{
fixCommonErrors.RunBatch(p.Subtitle, p.Format, p.Encoding, l);
fixCommonErrors.RunBatch(p.Subtitle, p.Format, p.Encoding.Encoding, l);
p.Subtitle = fixCommonErrors.FixedSubtitle;
}
}

View File

@ -182,7 +182,7 @@ namespace Nikse.SubtitleEdit.Forms
DialogResult = DialogResult.Cancel;
}
private Encoding GetCurrentEncoding()
private TextEncoding GetCurrentEncoding()
{
return UiUtil.GetTextEncodingComboBoxCurrentEncoding(comboBoxEncoding);
}
@ -211,7 +211,7 @@ namespace Nikse.SubtitleEdit.Forms
{
try
{
File.WriteAllText(saveFileDialog1.FileName, GenerateText(_subtitle, _translated, _title), GetCurrentEncoding());
FileUtil.WriteAllText(saveFileDialog1.FileName, GenerateText(_subtitle, _translated, _title), GetCurrentEncoding());
LogMessage = string.Format(Configuration.Settings.Language.ExportCustomText.SubtitleExportedInCustomFormatToX, saveFileDialog1.FileName);
DialogResult = DialogResult.OK;
}

View File

@ -233,7 +233,7 @@ namespace Nikse.SubtitleEdit.Forms
return text;
}
private Encoding GetCurrentEncoding()
private TextEncoding GetCurrentEncoding()
{
return UiUtil.GetTextEncodingComboBoxCurrentEncoding(comboBoxEncoding);
}
@ -250,7 +250,7 @@ namespace Nikse.SubtitleEdit.Forms
if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
{
File.WriteAllText(saveFileDialog1.FileName, textBoxText.Text, GetCurrentEncoding());
FileUtil.WriteAllText(saveFileDialog1.FileName, textBoxText.Text, GetCurrentEncoding());
DialogResult = DialogResult.OK;
}
}

View File

@ -143,7 +143,7 @@ namespace Nikse.SubtitleEdit.Forms
comboBoxLanguage.EndUpdate();
}
public void RunBatchSettings(Subtitle subtitle, SubtitleFormat format, Encoding encoding, string language)
public void RunBatchSettings(Subtitle subtitle, SubtitleFormat format, TextEncoding encoding, string language)
{
_autoDetectGoogleLanguage = language;
var ci = CultureInfo.GetCultureInfo(_autoDetectGoogleLanguage);
@ -178,7 +178,7 @@ namespace Nikse.SubtitleEdit.Forms
FixedSubtitle = new Subtitle(subtitle, false); // copy constructor
Subtitle = new Subtitle(subtitle, false); // copy constructor
_format = format;
Encoding = encoding;
Encoding = encoding.Encoding;
_onlyListFixes = false;
InitUserInterface();
groupBoxStep1.Text = string.Empty;

View File

@ -899,7 +899,7 @@
"Unicode",
"Unicode (big endian)"});
this.comboBoxEncoding.Name = "comboBoxEncoding";
this.comboBoxEncoding.Size = new System.Drawing.Size(125, 23);
this.comboBoxEncoding.Size = new System.Drawing.Size(129, 23);
this.comboBoxEncoding.DropDown += new System.EventHandler(this.MenuOpened);
this.comboBoxEncoding.DropDownClosed += new System.EventHandler(this.MenuClosed);
//

View File

@ -719,7 +719,12 @@ namespace Nikse.SubtitleEdit.Forms
private void SetEncoding(Encoding encoding)
{
foreach (TextEncodingListItem item in comboBoxEncoding.Items)
if (encoding == Encoding.UTF8 && Configuration.Settings.General.DefaultEncoding == TextEncoding.Utf8WithoutBom)
{
comboBoxEncoding.SelectedIndex = TextEncoding.Utf8WithoutBomIndex;
}
foreach (TextEncoding item in comboBoxEncoding.Items)
{
if (item.Equals(encoding))
{
@ -728,26 +733,17 @@ namespace Nikse.SubtitleEdit.Forms
}
}
comboBoxEncoding.SelectedIndex = 0; // UTF-8
comboBoxEncoding.SelectedIndex = TextEncoding.Utf8WithBomIndex; // UTF-8 with BOM
}
private void SetEncoding(string encodingName)
{
foreach (TextEncodingListItem item in comboBoxEncoding.Items)
{
if (item.Equals(encodingName))
{
comboBoxEncoding.SelectedItem = item;
return;
}
}
comboBoxEncoding.SelectedIndex = 0; // UTF-8
UiUtil.SetTextEncoding(comboBoxEncoding, encodingName);
}
private Encoding GetCurrentEncoding()
{
return UiUtil.GetTextEncodingComboBoxCurrentEncoding(comboBoxEncoding.ComboBox);
return UiUtil.GetTextEncodingComboBoxCurrentEncoding(comboBoxEncoding.ComboBox).Encoding;
}
private void AudioWaveform_OnNonParagraphRightClicked(object sender, AudioVisualizer.ParagraphEventArgs e)
@ -3030,12 +3026,23 @@ namespace Nikse.SubtitleEdit.Forms
SetTitle();
ShowStatus(string.Format(_language.LoadedSubtitleX, _fileName));
_sourceViewChange = false;
if (Configuration.Settings.General.AutoConvertToUtf8)
if (Configuration.Settings.General.AutoConvertToUtf8 || encoding == Encoding.UTF8)
{
encoding = Encoding.UTF8;
if (File.Exists(_fileName) && FileUtil.HasUtf8Bom(fileName))
{
SetEncoding(TextEncoding.Utf8WithBom);
}
else
{
SetEncoding(Configuration.Settings.General.DefaultEncoding == TextEncoding.Utf8WithoutBom ? TextEncoding.Utf8WithoutBom : TextEncoding.Utf8WithBom);
}
}
else
{
SetEncoding(encoding);
}
SetEncoding(encoding);
_changeSubtitleHash = _subtitle.GetFastHashCode(GetCurrentEncoding().BodyName);
_converted = false;
ResetHistory();
@ -3782,7 +3789,7 @@ namespace Nikse.SubtitleEdit.Forms
return DialogResult.Cancel;
}
if (Equals(currentEncoding, Encoding.UTF8) && !Configuration.Settings.General.WriteUtf8Bom)
if (comboBoxEncoding.SelectedIndex == TextEncoding.Utf8WithoutBomIndex)
{
var outputEnc = new UTF8Encoding(false); // create encoding with no BOM
using (var file = new StreamWriter(_fileName, false, outputEnc)) // open file with encoding

View File

@ -338,37 +338,37 @@
<data name="toolStripButtonFixCommonErrors.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
TUzs57H5AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButtonRemoveTextForHi.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -466,20 +466,20 @@
<data name="toolStripButtonNetflixQualityCheck.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALoSURBVFhHtZfPaxNBFMdHs7/GpNns7vQoeNWDZw969+Ld
g3+AF+8ehF4Eq1gRFBqwBS3F1h9tEoqgWAyeSqmCQltKK6bZH4IH8VIR/NH1vTAJ29lXMJvsF76neW/f
J2/2zU7YYdqw3DjiIuW2VjknQ0g1DDumPMaYJkP+T2/MCgkQmt6CDCFFFUf3DbAEADuWlwJY5+JPy7RP
yLCUqOLovgHGDHt/2aC7EHBvQoalRBVHZwKY08pxm+hCZIrv64yVZOgBUcXRmQBqejluGk4aAOybo1dk
6AFRxdGZADBxulAmASLL2YaHHpXhPamFu84MMAXbsGbSIxkalQsyvCe1cNeZAZ7ANsxoNgngW2JZhvek
Fu46MwD6VmEk3iQOputc7Ad65bRM6ShZNOmBACa1kXhRp7sQWN6UTOkoWTTpgQBm4D24DV34TI0kt39u
s9KoTMsHAMdxHABeHXIwhZa4JtPYM4hNFu56IAD0XQC4B4aCv1SASLe/wMFkYN5D6FYyr+uBAXAcsQsB
d+dSAODAqlzCvPsQk8zremAAHMcOgOaeIQFM8Q7zbkLMIrENAwOgcRxxLTK8FQqirTlnERJfWjV3KAA4
jrjm6+IiBQB3hecIgHFq7lAA8JfhWhMeFnHPVwHwroDvAHYKJyeZOxQAfKhcZoHlXFUB0K9hVLELs3kA
oOUy81nZ3eKlHyrALhxWeGhVlW0YOgAqskRVBUDX9Uo8ARDJvFwAWoZ7Ej9IKsAWdAHH8XFiG3IBQIWW
91IFQM/CJ/xBYhtyA/CPOecpgPdwibmT2IbcAEBHAi42KYgqjO283IY8AVjIvcsUwFu40OI3BPNyBfjA
WBGu6t9UAB9exkm5DbkCoEIuxlUA9AsYyaewDfkDMOd4i4vfKsAn6MIj2IbcAVDwl21eBUDX4T7ZN8CC
UdxrFIqthm6v1vXyUs0oT9d0+4ZcJrVruKdWDXtlDf60fNSdrxu8uLcDXWly8ZcGYOwfi5WszR7HdLEA
AAAASUVORK5CYII=
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALpSURBVFhHtZfPaxNBFMdHs7/GpNns7vQoeNWDZw969+Ld
g3+AF+8ehB48WMWKoNCALWgptv5ok1AExWLwVEoVFNpSWjHN/hA8iJeK4I+u74VJ2M6+gtlkv/A9zXv7
Pnmzb3bCDtOG5cYRFym3tco5GUKqYdgx5THGNBnyf3pjVkiA0PQWZAgpqji6b4AlANixvBTAOhd/WqZ9
QoalRBVH9w0wZtj7ywbdhYB7EzIsJao4OhPAnFaO20QXIlN8X2esJEMPiCqOzgRQ08tx03DSAGDfHL0i
Qw+IKo7OBICJ04UyCRBZzjY89KgM70kt3HVmgCnYhjWTHsnQqFyQ4T2phbvODPAEtmFGs0kA3xLLMrwn
tXDXmQHQtwoj8SZxMF3nYj/QK6dlSkfJokkPBDCpjcSLOt2FwPKmZEpHyaJJDwQwA+/BbejCZ2okuf1z
m5VGZVo+ADiO4wDw6pCDKbTENZnGnkFssnDXAwGg7wLAPTAU/KUCRLr9BQ4mA/MeQreSeV0PDIDjiF0I
uDuXAgAHVuUS5t2HmGRe1wMD4Dh2ADT3DAlgineYdxNiFoltGBgAjeOIa5HhrVAQbc05i5D40qq5QwHA
ccQ1XxcXKQC4KzxHAIxTc4cCgL8M15rwsIh7vgqAdwV8B7BTODnJ3KEA4EPlMgss56oKgH4No4pdmM0D
AC2Xmc/K7hYv/VABduGwwkOrqmzD0AFQkSWqKgC6rlfiCYBI5uUC0DLck/hBUgG2oAs4jo8T25ALACq0
vJcqAHoWPuEPEtuQG4B/zDlPAbyHS8ydxDbkBgA6EnCxSUFUYWzn5TbkCcBC7l2mAN7ChRa/IZiXK8AH
xopwVf+mAvjwMk7KbcgVABVyMa4CoF/ASD6FbcgfgDnHW1z8VgE+QRcewTbkDoCCv2zzKgC6DvfJvgEW
jOJeo1BsNXR7ta6Xl2pGebqm2zfkMqldwz21atgra/Cn5aPufN3gxb0d6EqTi780AGP/AHtyrMt08c9n
AAAAAElFTkSuQmCC
</value>
</data>
<data name="toolStripButtonToggleWaveform.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -706,7 +706,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2
CAAAAk1TRnQBSQFMAgEBAgEAAbABJgGwASYBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CAAAAk1TRnQBSQFMAgEBAgEAAbgBJgG4ASYBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

View File

@ -1471,7 +1471,7 @@ namespace Nikse.SubtitleEdit.Forms
gs.DefaultFrameRate = outFrameRate;
}
gs.DefaultEncoding = UiUtil.GetTextEncodingComboBoxCurrentEncoding(comboBoxEncoding).WebName;
gs.DefaultEncoding = ((TextEncoding)comboBoxEncoding.Items[comboBoxEncoding.SelectedIndex]).ToString();
gs.AutoGuessAnsiEncoding = checkBoxAutoDetectAnsiEncoding.Checked;
gs.SubtitleFontSize = int.Parse(comboBoxSubtitleFontSize.Text);

View File

@ -235,7 +235,7 @@ namespace Nikse.SubtitleEdit.Forms
overwrite = true;
}
File.WriteAllText(fileName, allText, GetCurrentEncoding());
FileUtil.WriteAllText(fileName, allText, GetCurrentEncoding());
number++;
}
}
@ -297,7 +297,7 @@ namespace Nikse.SubtitleEdit.Forms
}
}
private Encoding GetCurrentEncoding()
private TextEncoding GetCurrentEncoding()
{
return UiUtil.GetTextEncodingComboBoxCurrentEncoding(comboBoxEncoding);
}

View File

@ -219,13 +219,34 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
Configuration.Settings.General.CurrentFrameRate = frameRate.Value;
}
var targetEncoding = Encoding.UTF8;
var targetEncoding = new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithBom);
if (Configuration.Settings.General.DefaultEncoding == TextEncoding.Utf8WithoutBom)
{
targetEncoding = new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithoutBom);
}
try
{
var encodingName = GetArgument(unconsumedArguments, "encoding:");
if (encodingName.Length > 0)
{
targetEncoding = Encoding.GetEncoding(encodingName);
if (encodingName.Equals("utf8", StringComparison.OrdinalIgnoreCase) ||
encodingName.Equals("utf-8", StringComparison.OrdinalIgnoreCase) ||
encodingName.Equals("utf-8-bom", StringComparison.OrdinalIgnoreCase) ||
encodingName.Equals(TextEncoding.Utf8WithBom.Replace(" ", string.Empty), StringComparison.OrdinalIgnoreCase) ||
encodingName.Equals(TextEncoding.Utf8WithBom.Replace(" ", "-"), StringComparison.OrdinalIgnoreCase))
{
targetEncoding = new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithBom);
}
else if (encodingName.Equals("utf-8-no-bom", StringComparison.OrdinalIgnoreCase) ||
encodingName.Equals(TextEncoding.Utf8WithoutBom.Replace(" ", string.Empty), StringComparison.OrdinalIgnoreCase) ||
encodingName.Equals(TextEncoding.Utf8WithoutBom.Replace(" ", "-"), StringComparison.OrdinalIgnoreCase))
{
targetEncoding = new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithoutBom);
}
else
{
targetEncoding = new TextEncoding(Encoding.GetEncoding(encodingName), null);
}
}
}
catch (Exception exception)
@ -749,7 +770,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
return null;
}
private static void ConvertBluRaySubtitle(string fileName, string targetFormat, TimeSpan offset, Encoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors, IEnumerable<SubtitleFormat> formats, bool overwrite, int pacCodePage, double? targetFrameRate, ICollection<string> multipleReplaceImportFiles, IEnumerable<BatchAction> actions, bool forcedOnly, Point? resolution)
private static void ConvertBluRaySubtitle(string fileName, string targetFormat, TimeSpan offset, TextEncoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors, IEnumerable<SubtitleFormat> formats, bool overwrite, int pacCodePage, double? targetFrameRate, ICollection<string> multipleReplaceImportFiles, IEnumerable<BatchAction> actions, bool forcedOnly, Point? resolution)
{
var format = Utilities.GetSubtitleFormatByFriendlyName(targetFormat) ?? new SubRip();
@ -778,7 +799,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
}
}
private static void ConvertVobSubSubtitle(string fileName, string targetFormat, TimeSpan offset, Encoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors, IEnumerable<SubtitleFormat> formats, bool overwrite, int pacCodePage, double? targetFrameRate, ICollection<string> multipleReplaceImportFiles, IEnumerable<BatchAction> actions, bool forcedOnly)
private static void ConvertVobSubSubtitle(string fileName, string targetFormat, TimeSpan offset, TextEncoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors, IEnumerable<SubtitleFormat> formats, bool overwrite, int pacCodePage, double? targetFrameRate, ICollection<string> multipleReplaceImportFiles, IEnumerable<BatchAction> actions, bool forcedOnly)
{
var format = Utilities.GetSubtitleFormatByFriendlyName(targetFormat) ?? new SubRip();
@ -804,7 +825,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
}
}
private static void ConvertImageListSubtitle(string fileName, Subtitle subtitle, string targetFormat, TimeSpan offset, Encoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors, IEnumerable<SubtitleFormat> formats, bool overwrite, int pacCodePage, double? targetFrameRate, ICollection<string> multipleReplaceImportFiles, IEnumerable<BatchAction> actions)
private static void ConvertImageListSubtitle(string fileName, Subtitle subtitle, string targetFormat, TimeSpan offset, TextEncoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors, IEnumerable<SubtitleFormat> formats, bool overwrite, int pacCodePage, double? targetFrameRate, ICollection<string> multipleReplaceImportFiles, IEnumerable<BatchAction> actions)
{
var format = Utilities.GetSubtitleFormatByFriendlyName(targetFormat) ?? new SubRip();
@ -1042,7 +1063,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
}
}
internal static bool BatchConvertSave(string targetFormat, TimeSpan offset, Encoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors,
internal static bool BatchConvertSave(string targetFormat, TimeSpan offset, TextEncoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors,
IEnumerable<SubtitleFormat> formats, string fileName, Subtitle sub, SubtitleFormat format, IList<IBinaryParagraph> binaryParagraphs, bool overwrite, int pacCodePage,
double? targetFrameRate, ICollection<string> multipleReplaceImportFiles, IEnumerable<BatchAction> actions = null,
Point? resolution = null, bool autoDetectLanguage = false, BatchConvertProgress progressCallback = null)
@ -1082,7 +1103,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
language = LanguageAutoDetect.AutoDetectGoogleLanguage(sub);
}
fce.RunBatch(sub, format, targetEncoding, language);
fce.RunBatch(sub, format, targetEncoding.Encoding, language);
sub = fce.FixedSubtitle;
}
}
@ -1179,7 +1200,10 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
if (sf.GetType() == typeof(WebVTT) || sf.GetType() == typeof(WebVTTFileWithLineNumber))
{
targetEncoding = Encoding.UTF8;
if (!targetEncoding.IsUtf8)
{
targetEncoding = new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithBom);
}
}
// Remove native formatting
@ -1206,9 +1230,13 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
file.Write(sub.ToText(sf));
} // save and close it
}
else if (sf.Extension == ".rtf")
{
File.WriteAllText(outputFileName, sub.ToText(sf), Encoding.ASCII);
}
else
{
File.WriteAllText(outputFileName, sub.ToText(sf), sf.Extension == ".rtf" ? Encoding.ASCII : targetEncoding);
FileUtil.WriteAllText(outputFileName, sub.ToText(sf), targetEncoding);
}
}
catch (Exception ex)
@ -1243,7 +1271,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
}
outputFileName = FormatOutputFileNameForBatchConvert(s, sf.Extension, outputFolder, overwrite);
File.WriteAllText(outputFileName, newSub.ToText(sf), targetEncoding);
FileUtil.WriteAllText(outputFileName, newSub.ToText(sf), targetEncoding);
}
}
}
@ -1357,7 +1385,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
AddNewAfterText2 = Configuration.Settings.Tools.ExportTextNewLineBetweenSubtitles,
FormatMergeAll = Configuration.Settings.Tools.ExportTextFormatText == "MergeAll"
};
File.WriteAllText(outputFileName, ExportText.GeneratePlainText(sub, exportOptions), targetEncoding);
FileUtil.WriteAllText(outputFileName, ExportText.GeneratePlainText(sub, exportOptions), targetEncoding);
_stdOutWriter?.WriteLine(" done.");
}
}
@ -1745,7 +1773,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
outputFileName = FormatOutputFileNameForBatchConvert(fileName, ".txt", outputFolder, overwrite);
_stdOutWriter?.Write($"{count}: {Path.GetFileName(fileName)} -> {outputFileName}...");
File.WriteAllText(outputFileName, ExportCustomText.GenerateCustomText(sub, null, title, template), targetEncoding);
FileUtil.WriteAllText(outputFileName, ExportCustomText.GenerateCustomText(sub, null, title, template), targetEncoding);
_stdOutWriter?.WriteLine(" done.");
break;
}

View File

@ -1,59 +0,0 @@
using System;
using System.Text;
namespace Nikse.SubtitleEdit.Logic
{
internal class TextEncodingListItem : IEquatable<Encoding>, IEquatable<string>
{
private readonly Encoding _encoding;
private readonly string _displayName;
public Encoding Encoding => _encoding;
public string DisplayName => _displayName;
public TextEncodingListItem(Encoding encoding)
{
if (encoding.CodePage.Equals(Encoding.UTF8.CodePage))
{
_encoding = Encoding.UTF8;
_displayName = _encoding.EncodingName;
}
else
{
_encoding = encoding;
_displayName = encoding.CodePage + ": " + encoding.EncodingName;
}
}
public override string ToString()
{
return _displayName;
}
public bool Equals(string name)
{
return !ReferenceEquals(name, null) && (
_encoding.WebName.Equals(name, StringComparison.OrdinalIgnoreCase) ||
_encoding.EncodingName.Equals(name, StringComparison.OrdinalIgnoreCase) ||
_displayName.Equals(name, StringComparison.OrdinalIgnoreCase) ||
_encoding.CodePage.ToString().Equals(name));
}
public bool Equals(Encoding encoding)
{
return !ReferenceEquals(encoding, null) && _encoding.CodePage.Equals(encoding.CodePage);
}
public override bool Equals(object obj)
{
var item = obj as TextEncodingListItem;
return !ReferenceEquals(item, null) && Equals(item.Encoding);
}
public override int GetHashCode()
{
return _encoding.CodePage.GetHashCode();
}
}
}

View File

@ -713,7 +713,7 @@ namespace Nikse.SubtitleEdit.Logic
public static void InitializeTextEncodingComboBox(ComboBox comboBox)
{
var defaultEncoding = Configuration.Settings.General.DefaultEncoding;
var selectedItem = (TextEncodingListItem)null;
var selectedItem = (TextEncoding)null;
comboBox.BeginUpdate();
comboBox.Items.Clear();
using (var graphics = comboBox.CreateGraphics())
@ -723,7 +723,7 @@ namespace Nikse.SubtitleEdit.Logic
{
if (encoding.CodePage >= 949 && !encoding.IsEbcdic())
{
var item = new TextEncodingListItem(encoding);
var item = new TextEncoding(encoding, null);
if (selectedItem == null && item.Equals(defaultEncoding))
{
selectedItem = item;
@ -735,7 +735,19 @@ namespace Nikse.SubtitleEdit.Logic
}
if (encoding.CodePage.Equals(Encoding.UTF8.CodePage))
{
comboBox.Items.Insert(0, item);
item = new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithBom);
comboBox.Items.Insert(TextEncoding.Utf8WithBomIndex, item);
if (item.Equals(defaultEncoding))
{
selectedItem = item;
}
item = new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithoutBom);
comboBox.Items.Insert(TextEncoding.Utf8WithoutBomIndex, item);
if (item.Equals(defaultEncoding))
{
selectedItem = item;
}
}
else
{
@ -747,30 +759,62 @@ namespace Nikse.SubtitleEdit.Logic
}
if (selectedItem == null)
{
comboBox.SelectedIndex = 0; // UTF-8 if DefaultEncoding is not found
comboBox.SelectedIndex = TextEncoding.Utf8WithBomIndex; // UTF-8 if DefaultEncoding is not found
}
else if (selectedItem.DisplayName == TextEncoding.Utf8WithoutBom)
{
comboBox.SelectedIndex = TextEncoding.Utf8WithoutBomIndex;
}
else
{
comboBox.SelectedItem = selectedItem;
}
comboBox.EndUpdate();
if (comboBox.SelectedItem is TextEncodingListItem textEncodingListItem)
if (comboBox.SelectedItem is TextEncoding textEncodingListItem)
{
Configuration.Settings.General.DefaultEncoding = textEncodingListItem.Encoding.WebName;
Configuration.Settings.General.DefaultEncoding = textEncodingListItem.DisplayName;
}
comboBox.AutoCompleteSource = AutoCompleteSource.ListItems;
comboBox.AutoCompleteMode = AutoCompleteMode.Append;
}
public static Encoding GetTextEncodingComboBoxCurrentEncoding(ComboBox comboBox)
public static TextEncoding GetTextEncodingComboBoxCurrentEncoding(ComboBox comboBox)
{
if (comboBox.SelectedIndex > 0 && comboBox.SelectedItem is TextEncodingListItem textEncodingListItem)
if (comboBox.SelectedIndex > 0 && comboBox.SelectedItem is TextEncoding textEncodingListItem)
{
return textEncodingListItem.Encoding;
return textEncodingListItem;
}
return Encoding.UTF8;
return new TextEncoding(Encoding.UTF8, TextEncoding.Utf8WithBom);
}
public static void SetTextEncoding(ToolStripComboBox comboBoxEncoding, string encodingName)
{
if (encodingName == TextEncoding.Utf8WithBom)
{
comboBoxEncoding.SelectedIndex = TextEncoding.Utf8WithBomIndex;
return;
}
if (encodingName == TextEncoding.Utf8WithoutBom)
{
comboBoxEncoding.SelectedIndex = TextEncoding.Utf8WithoutBomIndex;
return;
}
foreach (TextEncoding item in comboBoxEncoding.Items)
{
if (item.Equals(encodingName))
{
comboBoxEncoding.SelectedItem = item;
return;
}
}
comboBoxEncoding.SelectedIndex = TextEncoding.Utf8WithBomIndex; // UTF-8 with BOM
}
private const string BreakChars = "\",:;.¡!¿?()[]{}<>♪♫-–—/#*|";
public static void ApplyControlBackspace(TextBox textBox)

View File

@ -1038,7 +1038,6 @@
<Compile Include="Logic\SpellCheck\VoikkoSpellCheck.cs" />
<Compile Include="Logic\SpellCheck\WindowsHunspell.cs" />
<Compile Include="Logic\SyncContextExtensions.cs" />
<Compile Include="Logic\TextEncodingListItem.cs" />
<Compile Include="Logic\UiEbuSaveHelper.cs" />
<Compile Include="Logic\UiGetPacEncoding.cs" />
<Compile Include="Logic\UiGetYouTubeAnnotationStyles.cs" />