Skip to content

Commit 62ccbb1

Browse files
authored
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
1 parent 6299be2 commit 62ccbb1

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

src/texteditor.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ void TextEditor::clear()
6565

6666
m_filename.clear();
6767
m_encoding.clear();
68+
m_needsBOM = false;
6869
setPlainText("");
6970
dirty(false);
7071
document()->setModified(false);
@@ -80,7 +81,7 @@ bool TextEditor::load(const QString& filename)
8081

8182
m_filename = filename;
8283

83-
const QString s = MOBase::readFileText(filename, &m_encoding);
84+
const QString s = MOBase::readFileText(filename, &m_encoding, &m_needsBOM);
8485

8586
setPlainText(s);
8687
document()->setModified(false);
@@ -106,10 +107,13 @@ bool TextEditor::save()
106107
file.open(QIODevice::WriteOnly);
107108
file.resize(0);
108109

109-
auto codec = QStringConverter::encodingForName(m_encoding.toLocal8Bit());
110+
auto codec = QStringConverter::encodingForName(m_encoding.toUtf8());
110111
if (!codec.has_value())
111112
return false;
112-
QStringEncoder encoder(codec.value());
113+
QStringConverter::Flags flags = QStringEncoder::Flag::Default;
114+
if (m_needsBOM)
115+
flags |= QStringConverter::Flag::WriteBom;
116+
QStringEncoder encoder(codec.value(), flags);
113117

114118
QString data = toPlainText().replace("\n", "\r\n");
115119

src/texteditor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ class TextEditor : public QPlainTextEdit
130130
QColor m_highlightBackground;
131131
QString m_filename;
132132
QString m_encoding;
133+
bool m_needsBOM;
133134
bool m_dirty;
134135
bool m_loading;
135136

0 commit comments

Comments
 (0)