mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 14:32:35 +01:00
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:
parent
39ab2e0dca
commit
0f28d058cc
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
63
libse/TextEncoding.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
2
src/Forms/Main.Designer.cs
generated
2
src/Forms/Main.Designer.cs
generated
@ -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);
|
||||
//
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -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" />
|
||||
|
Loading…
Reference in New Issue
Block a user