Merge branch 'fs-mem-string-data'

Use UTF-8 for memory FS data if it's not in Latin-1.

See https://github.com/wxWidgets/wxWidgets/pull/2622

See #19314.
This commit is contained in:
Vadim Zeitlin
2022-01-02 12:46:05 +01:00
2 changed files with 12 additions and 1 deletions

View File

@@ -83,6 +83,12 @@ public:
Stored data (bitmap, text or raw data) will be copied into private memory Stored data (bitmap, text or raw data) will be copied into private memory
stream and available under name @c "memory:" + @e filename. stream and available under name @c "memory:" + @e filename.
When using the overload taking @c wxString data, if the string contains
only Latin-1 characters (which includes strings created using
wxString::From8BitData()), its data is used as is. Otherwise, the UTF-8
representation of the string is stored as the data associated with the
given @a filename.
@note you must use a @a type value (aka image format) that wxWidgets @note you must use a @a type value (aka image format) that wxWidgets
can save (e.g. JPG, PNG, see wxImage documentation)! can save (e.g. JPG, PNG, see wxImage documentation)!

View File

@@ -180,7 +180,12 @@ void wxMemoryFSHandlerBase::AddFileWithMimeType(const wxString& filename,
const wxString& textdata, const wxString& textdata,
const wxString& mimetype) const wxString& mimetype)
{ {
const wxCharBuffer buf(textdata.To8BitData()); // We try to use the provided data "as is" if possible, but if not, we fall
// back to UTF-8 because it's better to do this than just lose the data
// completely.
wxCharBuffer buf(textdata.To8BitData());
if ( !buf.length() )
buf = textdata.utf8_str();
AddFileWithMimeType(filename, buf.data(), buf.length(), mimetype); AddFileWithMimeType(filename, buf.data(), buf.length(), mimetype);
} }