summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Djali <AnyOldName3@users.noreply.github.com>2025-02-28 18:52:49 +0000
committerGitHub <noreply@github.com>2025-02-28 19:52:49 +0100
commit62ccbb1d026b08ae70973e5b15adecd980556f0e (patch)
tree92a45fedb87b8a80c4d8538ddcf901cec3c03ca8
parent6299be28e13662d1b28be5f77f53ea2118e87dae (diff)
Write BOM if original file used one (#2213)
Important for UTF-16 as lots of things can't detect or read UTF-16 without a BOM
-rw-r--r--src/texteditor.cpp10
-rw-r--r--src/texteditor.h1
2 files changed, 8 insertions, 3 deletions
diff --git a/src/texteditor.cpp b/src/texteditor.cpp
index 281a545d..e015dc91 100644
--- a/src/texteditor.cpp
+++ b/src/texteditor.cpp
@@ -65,6 +65,7 @@ void TextEditor::clear()
m_filename.clear();
m_encoding.clear();
+ m_needsBOM = false;
setPlainText("");
dirty(false);
document()->setModified(false);
@@ -80,7 +81,7 @@ bool TextEditor::load(const QString& filename)
m_filename = filename;
- const QString s = MOBase::readFileText(filename, &m_encoding);
+ const QString s = MOBase::readFileText(filename, &m_encoding, &m_needsBOM);
setPlainText(s);
document()->setModified(false);
@@ -106,10 +107,13 @@ bool TextEditor::save()
file.open(QIODevice::WriteOnly);
file.resize(0);
- auto codec = QStringConverter::encodingForName(m_encoding.toLocal8Bit());
+ auto codec = QStringConverter::encodingForName(m_encoding.toUtf8());
if (!codec.has_value())
return false;
- QStringEncoder encoder(codec.value());
+ QStringConverter::Flags flags = QStringEncoder::Flag::Default;
+ if (m_needsBOM)
+ flags |= QStringConverter::Flag::WriteBom;
+ QStringEncoder encoder(codec.value(), flags);
QString data = toPlainText().replace("\n", "\r\n");
diff --git a/src/texteditor.h b/src/texteditor.h
index 7f6adcdb..e6694518 100644
--- a/src/texteditor.h
+++ b/src/texteditor.h
@@ -130,6 +130,7 @@ private:
QColor m_highlightBackground;
QString m_filename;
QString m_encoding;
+ bool m_needsBOM;
bool m_dirty;
bool m_loading;