basctl/source/basicide/baside2.cxx            |    4 
 basctl/source/basicide/baside2b.cxx           |    4 
 basic/source/basmgr/basmgr.cxx                |   10 -
 dbaccess/source/ui/tabledesign/TableRow.cxx   |   16 +-
 editeng/source/editeng/impedit4.cxx           |    6 
 editeng/source/items/legacyitem.cxx           |    8 -
 editeng/source/items/numitem.cxx              |    6 
 include/sfx2/objsh.hxx                        |    1 
 include/tools/stream.hxx                      |   57 ++++-----
 sc/qa/unit/screenshots/screenshots.cxx        |    2 
 sc/source/core/data/documen8.cxx              |    2 
 sc/source/core/tool/ddelink.cxx               |    4 
 sc/source/filter/dif/difexp.cxx               |    6 
 sc/source/filter/dif/difimp.cxx               |    8 -
 sc/source/filter/qpro/qpro.cxx                |    4 
 sc/source/filter/qpro/qproform.cxx            |    4 
 sc/source/ui/dbgui/asciiopt.cxx               |    6 
 sc/source/ui/dbgui/scuiasciiopt.cxx           |   12 -
 sc/source/ui/docshell/docsh.cxx               |    8 -
 sc/source/ui/docshell/impex.cxx               |   22 +--
 sc/source/ui/view/cellsh2.cxx                 |    2 
 sfx2/source/appl/sfxhelp.cxx                  |    2 
 sfx2/source/doc/objstor.cxx                   |   79 ------------
 svl/source/items/macitem.cxx                  |    2 
 svl/source/items/stringio.cxx                 |    4 
 svtools/source/misc/templatefoldercache.cxx   |    8 -
 svx/source/svdraw/svdotxln.cxx                |    2 
 sw/inc/iodetect.hxx                           |    2 
 sw/source/core/edit/edtox.cxx                 |    3 
 sw/source/filter/ascii/wrtasc.cxx             |    6 
 sw/source/filter/basflt/iodetect.cxx          |   96 +--------------
 sw/source/filter/md/swmd.cxx                  |   21 ---
 sw/source/filter/md/wrtmd.cxx                 |    2 
 sw/source/ui/dbui/createaddresslistdialog.cxx |    4 
 sw/source/ui/dbui/mmresultdialogs.cxx         |    2 
 sw/source/ui/index/cnttab.cxx                 |    5 
 sw/source/uibase/dbui/dbmgr.cxx               |    2 
 sw/source/uibase/uiview/srcview.cxx           |   12 -
 tools/Library_tl.mk                           |    4 
 tools/source/inet/inetstrm.cxx                |    2 
 tools/source/stream/stream.cxx                |  162 +++++++++++++++++++++-----
 vcl/source/edit/texteng.cxx                   |    6 
 vcl/source/filter/svm/SvmConverter.cxx        |    2 
 vcl/source/filter/svm/SvmReader.cxx           |    2 
 vcl/source/filter/svm/SvmWriter.cxx           |    4 
 vcl/source/font/font.cxx                      |    8 -
 vcl/source/gdi/TypeSerializer.cxx             |    2 
 vcl/source/gdi/jobset.cxx                     |    2 
 48 files changed, 287 insertions(+), 351 deletions(-)

New commits:
commit 55b9d8607b9817ec228267d2862ab5c41bf78bf3
Author:     Mike Kaganski <[email protected]>
AuthorDate: Wed Feb 25 11:42:25 2026 +0500
Commit:     Mike Kaganski <[email protected]>
CommitDate: Wed Feb 25 10:33:55 2026 +0100

    "CharSet" -> "Encoding" in SvStream
    
    Use the correct term. E.g., Unicode charset has different encodings
    like UTF-8 and UTF-16, and we mean encoding here.
    
    Change-Id: I65e90b31cda6e39fdb1584b492e6e0b9821865a5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200285
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>

diff --git a/basctl/source/basicide/baside2.cxx 
b/basctl/source/basicide/baside2.cxx
index 907d05cb0387..fae3c01bbc29 100644
--- a/basctl/source/basicide/baside2.cxx
+++ b/basctl/source/basicide/baside2.cxx
@@ -444,7 +444,7 @@ void ModulWindow::LoadBasic()
         // tdf#139196 - import macros using either default or utf-8 text 
encoding
         pStream->StartReadingUnicodeText(RTL_TEXTENCODING_UTF8);
         if (pStream->Tell() == 3)
-            pStream->SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+            pStream->SetStreamEncoding(RTL_TEXTENCODING_UTF8);
         GetEditView()->Read( *pStream );
         GetEditEngine()->SetUpdateMode( true );
         GetEditorWindow().PaintImmediately();
@@ -487,7 +487,7 @@ void ModulWindow::SaveBasicSource()
         EnterWait();
         AssertValidEditEngine();
         // tdf#139196 - export macros using utf-8 including BOM
-        pStream->SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+        pStream->SetStreamEncoding(RTL_TEXTENCODING_UTF8);
         pStream->WriteUChar(0xEF).WriteUChar(0xBB).WriteUChar(0xBF);
         GetEditEngine()->Write( *pStream );
         aMedium.Commit();
diff --git a/basctl/source/basicide/baside2b.cxx 
b/basctl/source/basicide/baside2b.cxx
index 633aff6c0c4f..cd2252aada11 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -127,7 +127,7 @@ std::u16string_view const cSuffixes = u"%&!#@$";
 OUString getTextEngineText (ExtTextEngine& rEngine)
 {
     SvMemoryStream aMemStream;
-    aMemStream.SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
+    aMemStream.SetStreamEncoding( RTL_TEXTENCODING_UTF8 );
     aMemStream.SetLineDelimiter( LINEEND_LF );
     rEngine.Write( aMemStream );
     std::size_t nSize = aMemStream.Tell();
@@ -142,7 +142,7 @@ void setTextEngineText (ExtTextEngine& rEngine, 
std::u16string_view aStr)
     OString aUTF8Str = OUStringToOString( aStr, RTL_TEXTENCODING_UTF8 );
     SvMemoryStream aMemStream( const_cast<char *>(aUTF8Str.getStr()), 
aUTF8Str.getLength(),
         StreamMode::READ );
-    aMemStream.SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
+    aMemStream.SetStreamEncoding( RTL_TEXTENCODING_UTF8 );
     aMemStream.SetLineDelimiter( LINEEND_LF );
     rEngine.Read(aMemStream);
 }
diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx
index 532d7792676a..f7dd92125b33 100644
--- a/basic/source/basmgr/basmgr.cxx
+++ b/basic/source/basmgr/basmgr.cxx
@@ -393,15 +393,15 @@ BasicLibInfo* BasicLibInfo::Create( SotStorageStream& 
rSStream )
         pInfo->bDoLoad = bDoLoad;
 
         // The name of the lib...
-        OUString aName = 
rSStream.ReadUniOrByteString(rSStream.GetStreamCharSet());
+        OUString aName = 
rSStream.ReadUniOrByteString(rSStream.GetStreamEncoding());
         pInfo->SetLibName( aName );
 
         // Absolute path...
-        OUString aStorageName = 
rSStream.ReadUniOrByteString(rSStream.GetStreamCharSet());
+        OUString aStorageName = 
rSStream.ReadUniOrByteString(rSStream.GetStreamEncoding());
         pInfo->SetStorageName( aStorageName );
 
         // Relative path...
-        OUString aRelStorageName = 
rSStream.ReadUniOrByteString(rSStream.GetStreamCharSet());
+        OUString aRelStorageName = 
rSStream.ReadUniOrByteString(rSStream.GetStreamEncoding());
         pInfo->SetRelStorageName( aRelStorageName );
 
         if ( nVer >= 2 )
@@ -746,7 +746,7 @@ void BasicManager::LoadOldBasicManager( SotStorage& 
rStorage )
         // and it proceeds ...
     }
     xManagerStream->Seek( nBasicEndOff+1 ); // +1: 0x00 as separator
-    OUString aLibs = 
xManagerStream->ReadUniOrByteString(xManagerStream->GetStreamCharSet());
+    OUString aLibs = 
xManagerStream->ReadUniOrByteString(xManagerStream->GetStreamEncoding());
     xManagerStream->SetBufferSize( 0 );
     xManagerStream.clear(); // Close stream
 
@@ -905,7 +905,7 @@ bool BasicManager::ImpLoadLibrary( BasicLibInfo* pLibInfo, 
SotStorage* pCurStora
                 if ( ( nPasswordMarker == PASSWORD_MARKER ) && 
!xBasicStream->eof() )
                 {
                     OUString aPassword = xBasicStream->ReadUniOrByteString(
-                        xBasicStream->GetStreamCharSet());
+                        xBasicStream->GetStreamEncoding());
                     pLibInfo->SetPassword( aPassword );
                 }
                 xBasicStream->SetCryptMaskKey(OString());
diff --git a/dbaccess/source/ui/tabledesign/TableRow.cxx 
b/dbaccess/source/ui/tabledesign/TableRow.cxx
index 02976fb59589..9d1f91e4c3b2 100644
--- a/dbaccess/source/ui/tabledesign/TableRow.cxx
+++ b/dbaccess/source/ui/tabledesign/TableRow.cxx
@@ -92,9 +92,9 @@ namespace dbaui
         if(pFieldDesc)
         {
             _rStr.WriteInt32( 1 );
-            _rStr.WriteUniOrByteString(pFieldDesc->GetName(), 
_rStr.GetStreamCharSet());
-            _rStr.WriteUniOrByteString(pFieldDesc->GetDescription(), 
_rStr.GetStreamCharSet());
-            _rStr.WriteUniOrByteString(pFieldDesc->GetHelpText(), 
_rStr.GetStreamCharSet());
+            _rStr.WriteUniOrByteString(pFieldDesc->GetName(), 
_rStr.GetStreamEncoding());
+            _rStr.WriteUniOrByteString(pFieldDesc->GetDescription(), 
_rStr.GetStreamEncoding());
+            _rStr.WriteUniOrByteString(pFieldDesc->GetHelpText(), 
_rStr.GetStreamEncoding());
             double nValue = 0.0;
             Any aValue = pFieldDesc->GetControlDefault();
             if ( aValue >>= nValue )
@@ -105,7 +105,7 @@ namespace dbaui
             else
             {
                 _rStr.WriteInt32( 2 );
-                _rStr.WriteUniOrByteString(::comphelper::getString(aValue), 
_rStr.GetStreamCharSet());
+                _rStr.WriteUniOrByteString(::comphelper::getString(aValue), 
_rStr.GetStreamEncoding());
             }
 
             _rStr.WriteInt32( pFieldDesc->GetType() );
@@ -132,9 +132,9 @@ namespace dbaui
             return _rStr;
         OFieldDescription* pFieldDesc = new OFieldDescription();
         _rRow.m_pActFieldDescr = pFieldDesc;
-        
pFieldDesc->SetName(_rStr.ReadUniOrByteString(_rStr.GetStreamCharSet()));
-        
pFieldDesc->SetDescription(_rStr.ReadUniOrByteString(_rStr.GetStreamCharSet()));
-        
pFieldDesc->SetHelpText(_rStr.ReadUniOrByteString(_rStr.GetStreamCharSet()));
+        
pFieldDesc->SetName(_rStr.ReadUniOrByteString(_rStr.GetStreamEncoding()));
+        
pFieldDesc->SetDescription(_rStr.ReadUniOrByteString(_rStr.GetStreamEncoding()));
+        
pFieldDesc->SetHelpText(_rStr.ReadUniOrByteString(_rStr.GetStreamEncoding()));
 
         _rStr.ReadInt32( nValue );
         Any aControlDefault;
@@ -148,7 +148,7 @@ namespace dbaui
                 break;
             }
             case 2:
-                aControlDefault <<= 
_rStr.ReadUniOrByteString(_rStr.GetStreamCharSet());
+                aControlDefault <<= 
_rStr.ReadUniOrByteString(_rStr.GetStreamEncoding());
                 break;
         }
 
diff --git a/editeng/source/editeng/impedit4.cxx 
b/editeng/source/editeng/impedit4.cxx
index fe65d27fe113..8801ecdd0b8f 100644
--- a/editeng/source/editeng/impedit4.cxx
+++ b/editeng/source/editeng/impedit4.cxx
@@ -128,12 +128,12 @@ EditPaM ImpEditEngine::ReadText( SvStream& rInput, 
EditSelection aSel )
     EditPaM aPaM = aSel.Max();
 
     OUString aTmpStr;
-    bool bDone = rInput.ReadByteStringLine( aTmpStr, rInput.GetStreamCharSet() 
);
+    bool bDone = rInput.ReadByteStringLine( aTmpStr, 
rInput.GetStreamEncoding() );
     while ( bDone )
     {
         aPaM = ImpInsertText( EditSelection( aPaM, aPaM ), aTmpStr );
         aPaM = ImpInsertParaBreak( aPaM );
-        bDone = rInput.ReadByteStringLine( aTmpStr, rInput.GetStreamCharSet() 
);
+        bDone = rInput.ReadByteStringLine( aTmpStr, rInput.GetStreamEncoding() 
);
     }
     return aPaM;
 }
@@ -252,7 +252,7 @@ ErrCode ImpEditEngine::WriteText( SvStream& rOutput, 
EditSelection aSel )
                 nEndPos = aSel.Max().GetIndex();
         }
         OUString aTmpStr = EditDoc::GetParaAsString( pNode, nStartPos, nEndPos 
);
-        rOutput.WriteByteStringLine( aTmpStr, rOutput.GetStreamCharSet() );
+        rOutput.WriteByteStringLine( aTmpStr, rOutput.GetStreamEncoding() );
     }
 
     return rOutput.GetError();
diff --git a/editeng/source/items/legacyitem.cxx 
b/editeng/source/items/legacyitem.cxx
index 28d6ba8ecbf2..58442a0dc19d 100644
--- a/editeng/source/items/legacyitem.cxx
+++ b/editeng/source/items/legacyitem.cxx
@@ -140,7 +140,7 @@ namespace legacy
             if ( nDoLoad & LOAD_LINK )
             {
                 // UNICODE: rStrm >> aRel;
-                OUString aRel = 
rStrm.ReadUniOrByteString(rStrm.GetStreamCharSet());
+                OUString aRel = 
rStrm.ReadUniOrByteString(rStrm.GetStreamEncoding());
 
                 // TODO/MBA: how can we get a BaseURL here?!
                 OSL_FAIL("No BaseURL!");
@@ -152,7 +152,7 @@ namespace legacy
             if ( nDoLoad & LOAD_FILTER )
             {
                 // UNICODE: rStrm >> maStrFilter;
-                
rItem.SetGraphicFilter(rStrm.ReadUniOrByteString(rStrm.GetStreamCharSet()));
+                
rItem.SetGraphicFilter(rStrm.ReadUniOrByteString(rStrm.GetStreamEncoding()));
             }
 
             rStrm.ReadSChar( nPos );
@@ -189,12 +189,12 @@ namespace legacy
                 // TODO/MBA: how to get a BaseURL?!
                 OUString aRel = INetURLObject::GetRelURL( u"", 
rItem.GetGraphicLink() );
                 // UNICODE: rStrm << aRel;
-                rStrm.WriteUniOrByteString(aRel, rStrm.GetStreamCharSet());
+                rStrm.WriteUniOrByteString(aRel, rStrm.GetStreamEncoding());
             }
             if ( !rItem.GetGraphicFilter().isEmpty() )
             {
                 // UNICODE: rStrm << rItem.GetGraphicFilter();
-                rStrm.WriteUniOrByteString(rItem.GetGraphicFilter(), 
rStrm.GetStreamCharSet());
+                rStrm.WriteUniOrByteString(rItem.GetGraphicFilter(), 
rStrm.GetStreamEncoding());
             }
             rStrm.WriteSChar( rItem.GetGraphicPos() );
             return rStrm;
diff --git a/editeng/source/items/numitem.cxx b/editeng/source/items/numitem.cxx
index a02cc575fcf5..89b46ccf771b 100644
--- a/editeng/source/items/numitem.cxx
+++ b/editeng/source/items/numitem.cxx
@@ -223,9 +223,9 @@ SvxNumberFormat::SvxNumberFormat( SvStream &rStream )
 
     rStream.ReadInt16( nCharTextDistance );
 
-    sPrefix = rStream.ReadUniOrByteString( rStream.GetStreamCharSet() );
-    sSuffix = rStream.ReadUniOrByteString( rStream.GetStreamCharSet() );
-    sCharStyleName = rStream.ReadUniOrByteString( rStream.GetStreamCharSet() );
+    sPrefix = rStream.ReadUniOrByteString( rStream.GetStreamEncoding() );
+    sSuffix = rStream.ReadUniOrByteString( rStream.GetStreamEncoding() );
+    sCharStyleName = rStream.ReadUniOrByteString( rStream.GetStreamEncoding() 
);
 
     sal_uInt16 hasGraphicBrush = 0;
     rStream.ReadUInt16( hasGraphicBrush );
diff --git a/include/tools/stream.hxx b/include/tools/stream.hxx
index 5616c3604b33..9d00fb91fc23 100644
--- a/include/tools/stream.hxx
+++ b/include/tools/stream.hxx
@@ -159,7 +159,7 @@ private:
     ErrCode         m_nError;
     SvStreamCompressFlags m_nCompressMode;
     LineEnd         m_eLineDelimiter;
-    rtl_TextEncoding m_eStreamCharSet;
+    rtl_TextEncoding m_eStreamEncoding;
 
     // Encryption
     OString m_aCryptMaskKey;// aCryptMaskKey.getLength != 0  -> Encryption used
@@ -214,9 +214,8 @@ public:
 
     void SetCryptMaskKey(const OString& rCryptMaskKey);
 
-    void            SetStreamCharSet( rtl_TextEncoding eCharSet )
-                        { m_eStreamCharSet = eCharSet; }
-    rtl_TextEncoding GetStreamCharSet() const { return m_eStreamCharSet; }
+    void SetStreamEncoding(rtl_TextEncoding eEncoding) { m_eStreamEncoding = 
eEncoding; }
+    rtl_TextEncoding GetStreamEncoding() const { return m_eStreamEncoding; }
 
     void            SetLineDelimiter( LineEnd eLineEnd )
                         { m_eLineDelimiter = eLineEnd; }
@@ -308,26 +307,26 @@ public:
               @endcode
               causing endless loops ...
     */
-    bool            ReadByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcCharSet,
+    bool            ReadByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcEncoding,
                                         sal_Int32 nMaxBytesToRead = 0xFFFE );
-    bool            WriteByteStringLine( std::u16string_view rStr, 
rtl_TextEncoding eDestCharSet );
+    bool            WriteByteStringLine( std::u16string_view rStr, 
rtl_TextEncoding eDestEncoding );
 
     /// Switch to no endian swapping and write 0xfeff
     void            StartWritingUnicodeText();
 
-    /** If eReadBomCharSet==RTL_TEXTENCODING_DONTKNOW: read 16bit, if 0xfeff do
+    /** If eReadBomEncoding==RTL_TEXTENCODING_DONTKNOW: read 16bit, if 0xfeff 
do
         nothing (UTF-16), if 0xfffe switch endian swapping (UTF-16), if 0xefbb
         or 0xbbef read another byte and check for UTF-8. If no UTF-* BOM was
         detected put all read bytes back. This means that if 2 bytes were read
         it was an UTF-16 BOM, if 3 bytes were read it was an UTF-8 BOM. There
         is no UTF-7, UTF-32 or UTF-EBCDIC BOM detection!
 
-        If eReadBomCharSet!=RTL_TEXTENCODING_DONTKNOW: only read a BOM of that
+        If eReadBomEncoding!=RTL_TEXTENCODING_DONTKNOW: only read a BOM of that
         encoding and switch endian swapping if UTF-16 and 0xfffe. */
-    void            StartReadingUnicodeText( rtl_TextEncoding eReadBomCharSet 
);
+    void StartReadingUnicodeText(rtl_TextEncoding eReadBomEncoding);
 
     /** Try StartWritingUnicodeText; if failed, use ICU to detect encoding 
from data.
-        After the function, the position is after BOM (if any); 
GetStreamCharSet
+        After the function, the position is after BOM (if any); 
GetStreamEncoding
         returns the detected encoding; GetEndian returns the detected 
endianness
         (for UTF-16). */
     void DetectEncoding();
@@ -340,16 +339,16 @@ public:
     */
     SAL_DLLPRIVATE bool ReadUniStringLine(OUString& rStr, sal_Int32 
nMaxCodepointsToRead);
     /** Read a 32bit length prefixed sequence of utf-16 if
-        eSrcCharSet==RTL_TEXTENCODING_UNICODE, otherwise read a 16bit length
-        prefixed sequence of bytes and convert from eSrcCharSet */
-    OUString        ReadUniOrByteString(rtl_TextEncoding eSrcCharSet);
+        eSrcEncoding==RTL_TEXTENCODING_UNICODE, otherwise read a 16bit length
+        prefixed sequence of bytes and convert from eSrcEncoding */
+    OUString ReadUniOrByteString(rtl_TextEncoding eSrcEncoding);
     /** Write a 32bit length prefixed sequence of utf-16 if
-        eSrcCharSet==RTL_TEXTENCODING_UNICODE, otherwise convert to eSrcCharSet
+        eDestEncoding==RTL_TEXTENCODING_UNICODE, otherwise convert to 
eDestEncoding
         and write a 16bit length prefixed sequence of bytes */
-    SvStream&       WriteUniOrByteString( std::u16string_view rStr, 
rtl_TextEncoding eDestCharSet );
+    SvStream& WriteUniOrByteString(std::u16string_view rStr, rtl_TextEncoding 
eDestEncoding);
 
-    /** Read a line of Unicode if eSrcCharSet==RTL_TEXTENCODING_UNICODE,
-        otherwise read a line of Bytecode and convert from eSrcCharSet
+    /** Read a line of Unicode if eSrcEncoding==RTL_TEXTENCODING_UNICODE,
+        otherwise read a line of Bytecode and convert from eSrcEncoding
 
         @param nMaxCodepointsToRead
                    Maximum of codepoints (2 bytes if Unicode, bytes if not
@@ -363,23 +362,23 @@ public:
               @endcode
               causing endless loops ...
     */
-    bool            ReadUniOrByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcCharSet,
+    bool            ReadUniOrByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcEncoding,
                                              sal_Int32 nMaxCodepointsToRead = 
0xFFFE );
     /** Write a sequence of Unicode characters if
-        eDestCharSet==RTL_TEXTENCODING_UNICODE, otherwise write a sequence of
-        Bytecodes converted to eDestCharSet. Write trailing zero, if bZero is 
true. */
-    bool            WriteUnicodeOrByteText(std::u16string_view rStr, 
rtl_TextEncoding eDestCharSet, bool bZero = false);
+        eDestEncoding==RTL_TEXTENCODING_UNICODE, otherwise write a sequence of
+        Bytecodes converted to eDestEncoding. Write trailing zero, if bZero is 
true. */
+    bool            WriteUnicodeOrByteText(std::u16string_view rStr, 
rtl_TextEncoding eDestEncoding, bool bZero = false);
     bool            WriteUnicodeOrByteText(std::u16string_view rStr)
-                    { return WriteUnicodeOrByteText(rStr, GetStreamCharSet(), 
/*bZero*/false); }
+                    { return WriteUnicodeOrByteText(rStr, GetStreamEncoding(), 
/*bZero*/false); }
 
-    /** Write a Unicode character if eDestCharSet==RTL_TEXTENCODING_UNICODE,
-        otherwise write as Bytecode converted to eDestCharSet.
+    /** Write a Unicode character if eDestEncoding==RTL_TEXTENCODING_UNICODE,
+        otherwise write as Bytecode converted to eDestEncoding.
 
         This may result in more than one byte being written if a multi byte
         encoding (e.g. UTF7, UTF8) is chosen. */
-    bool            WriteUniOrByteChar( sal_Unicode ch, rtl_TextEncoding 
eDestCharSet );
+    bool            WriteUniOrByteChar( sal_Unicode ch, rtl_TextEncoding 
eDestEncoding );
     bool            WriteUniOrByteChar( sal_Unicode ch )
-                    { return WriteUniOrByteChar( ch, GetStreamCharSet() ); }
+                    { return WriteUniOrByteChar( ch, GetStreamEncoding() ); }
 
     void            SetBufferSize( sal_uInt16 m_nBufSize );
     sal_uInt16      GetBufferSize() const { return m_nBufSize; }
@@ -441,7 +440,7 @@ inline SvStream& operator<<( SvStream& rStr, SvStrPtr f )
 TOOLS_DLLPUBLIC SvStream& endl( SvStream& rStr );
 /// same as endl() but Unicode
 TOOLS_DLLPUBLIC SvStream& endlu( SvStream& rStr );
-/// call endlu() if m_eStreamCharSet==RTL_TEXTECODING_UNICODE otherwise endl()
+/// call endlu() if m_eStreamEncoding==RTL_TEXTECODING_UNICODE otherwise endl()
 TOOLS_DLLPUBLIC SvStream& endlub( SvStream& rStr );
 
 /// Attempt to read nUnits 8bit units to an OString, returned OString's
diff --git a/sc/qa/unit/screenshots/screenshots.cxx 
b/sc/qa/unit/screenshots/screenshots.cxx
index 466dafdf1b09..c6294de2a795 100644
--- a/sc/qa/unit/screenshots/screenshots.cxx
+++ b/sc/qa/unit/screenshots/screenshots.cxx
@@ -99,7 +99,7 @@ void ScScreenshotTest::initialize()
     mpFact = ScAbstractDialogFactory::Create();
 
     SvMemoryStream* pNewMemStream = new SvMemoryStream(const_cast<sal_Unicode 
*>(mCsv.getStr()), mCsv.getLength() * sizeof(sal_Unicode), StreamMode::READ);
-    pNewMemStream->SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
+    pNewMemStream->SetStreamEncoding( RTL_TEXTENCODING_UNICODE );
     pNewMemStream->ResetEndianSwap();
     mpStream.reset(pNewMemStream);
 }
diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx
index 9d73ed7e7156..b511ea95d661 100644
--- a/sc/source/core/data/documen8.cxx
+++ b/sc/source/core/data/documen8.cxx
@@ -765,7 +765,7 @@ void ScDocument::LoadDdeLinks(SvStream& rStream)
     sal_uInt16 nCount(0);
     rStream.ReadUInt16( nCount );
 
-    const rtl_TextEncoding eCharSet = rStream.GetStreamCharSet();
+    const rtl_TextEncoding eCharSet = rStream.GetStreamEncoding();
     const size_t nMinStringSize = eCharSet == RTL_TEXTENCODING_UNICODE ? 
sizeof(sal_uInt32) : sizeof(sal_uInt16);
     const size_t nMinRecordSize = 1 + nMinStringSize*3;
     const size_t nMaxRecords = rStream.remainingSize() / nMinRecordSize;
diff --git a/sc/source/core/tool/ddelink.cxx b/sc/source/core/tool/ddelink.cxx
index 6d9eab0775d0..c398db35f9f7 100644
--- a/sc/source/core/tool/ddelink.cxx
+++ b/sc/source/core/tool/ddelink.cxx
@@ -83,7 +83,7 @@ ScDdeLink::ScDdeLink( ScDocument& rD, SvStream& rStream, 
ScMultipleReadHeader& r
 {
     rHdr.StartEntry();
 
-    rtl_TextEncoding eCharSet = rStream.GetStreamCharSet();
+    rtl_TextEncoding eCharSet = rStream.GetStreamEncoding();
     aAppl = rStream.ReadUniOrByteString( eCharSet );
     aTopic = rStream.ReadUniOrByteString( eCharSet );
     aItem = rStream.ReadUniOrByteString( eCharSet );
@@ -105,7 +105,7 @@ void ScDdeLink::Store( SvStream& rStream, 
ScMultipleWriteHeader& rHdr ) const
 {
     rHdr.StartEntry();
 
-    rtl_TextEncoding eCharSet = rStream.GetStreamCharSet();
+    rtl_TextEncoding eCharSet = rStream.GetStreamEncoding();
     rStream.WriteUniOrByteString( aAppl, eCharSet );
     rStream.WriteUniOrByteString( aTopic, eCharSet );
     rStream.WriteUniOrByteString( aItem, eCharSet );
diff --git a/sc/source/filter/dif/difexp.cxx b/sc/source/filter/dif/difexp.cxx
index 94f77aef829d..133372e39660 100644
--- a/sc/source/filter/dif/difexp.cxx
+++ b/sc/source/filter/dif/difexp.cxx
@@ -54,9 +54,9 @@ void ScFormatFilterPluginImpl::ScExportDif( SvStream& rOut, 
ScDocument& rDoc,
     OSL_ENSURE( rRange.aStart.Tab() == rRange.aEnd.Tab(),
         "ScExportDif(): only one table please!" );
 
-    const rtl_TextEncoding eStreamCharSet = rOut.GetStreamCharSet();
+    const rtl_TextEncoding eStreamCharSet = rOut.GetStreamEncoding();
     if ( eStreamCharSet != eCharSet )
-        rOut.SetStreamCharSet( eCharSet );
+        rOut.SetStreamEncoding( eCharSet );
 
     sal_Unicode cStrDelim('"');
     OString aStrDelimEncoded;    // only used if not Unicode
@@ -253,7 +253,7 @@ void ScFormatFilterPluginImpl::ScExportDif( SvStream& rOut, 
ScDocument& rDoc,
     aOS.setLength(0);
 
     // restore original value
-    rOut.SetStreamCharSet( eStreamCharSet );
+    rOut.SetStreamEncoding( eStreamCharSet );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/dif/difimp.cxx b/sc/source/filter/dif/difimp.cxx
index 626b76005988..01973a6766d4 100644
--- a/sc/source/filter/dif/difimp.cxx
+++ b/sc/source/filter/dif/difimp.cxx
@@ -221,10 +221,10 @@ DifParser::DifParser( SvStream& rNewIn, const ScDocument& 
rDoc, rtl_TextEncoding
     , pNumFormatter(rDoc.GetFormatTable())
     , rIn(rNewIn)
 {
-    if ( rIn.GetStreamCharSet() != eCharSet )
+    if ( rIn.GetStreamEncoding() != eCharSet )
     {
         OSL_FAIL( "CharSet passed overrides and modifies StreamCharSet" );
-        rIn.SetStreamCharSet( eCharSet );
+        rIn.SetStreamEncoding( eCharSet );
     }
     rIn.StartReadingUnicodeText( eCharSet );
 }
@@ -396,7 +396,7 @@ bool DifParser::ReadNextLine( OUString& rStr )
 {
     if( aLookAheadLine.isEmpty() )
     {
-        return rIn.ReadUniOrByteStringLine( rStr, rIn.GetStreamCharSet() );
+        return rIn.ReadUniOrByteStringLine( rStr, rIn.GetStreamEncoding() );
     }
     else
     {
@@ -414,7 +414,7 @@ bool DifParser::LookAhead()
     bool bValidStructure = false;
 
     OSL_ENSURE( aLookAheadLine.isEmpty(), "*DifParser::LookAhead(): LookAhead 
called twice in a row" );
-    rIn.ReadUniOrByteStringLine( aLookAheadLine, rIn.GetStreamCharSet() );
+    rIn.ReadUniOrByteStringLine( aLookAheadLine, rIn.GetStreamEncoding() );
 
     pCurrentBuffer = aLookAheadLine.getStr();
 
diff --git a/sc/source/filter/qpro/qpro.cxx b/sc/source/filter/qpro/qpro.cxx
index 4097ad1ce57c..b077446a73ce 100644
--- a/sc/source/filter/qpro/qpro.cxx
+++ b/sc/source/filter/qpro/qpro.cxx
@@ -160,7 +160,7 @@ ScQProReader::ScQProReader(SvStream* pStream)
     if( mpStream )
     {
         mpStream->SetBufferSize( 65535 );
-        mpStream->SetStreamCharSet( RTL_TEXTENCODING_MS_1252 );
+        mpStream->SetStreamEncoding( RTL_TEXTENCODING_MS_1252 );
     }
 }
 
@@ -314,7 +314,7 @@ bool ScQProReader::nextRecord()
 
 OUString ScQProReader::readString(sal_uInt16 nLength)
 {
-    return read_uInt8s_ToOUString(*mpStream, nLength, 
mpStream->GetStreamCharSet());
+    return read_uInt8s_ToOUString(*mpStream, nLength, 
mpStream->GetStreamEncoding());
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/qpro/qproform.cxx 
b/sc/source/filter/qpro/qproform.cxx
index 91b994d7a032..60050f914dcf 100644
--- a/sc/source/filter/qpro/qproform.cxx
+++ b/sc/source/filter/qpro/qproform.cxx
@@ -81,7 +81,7 @@ void QProToSc::DoFunc( DefTokenId eOc, sal_uInt16 nArgs, 
const char* pExtString
         if( pExtString )
         {
             OString s = OString::Concat("QPRO_") + pExtString;
-            nPush = aPool.Store(eOc, OStringToOUString(s, 
maIn.GetStreamCharSet()));
+            nPush = aPool.Store(eOc, OStringToOUString(s, 
maIn.GetStreamEncoding()));
             aPool << nPush;
         }
         else
@@ -247,7 +247,7 @@ ConvErr QProToSc::Convert( const ScDocument& rDoc, 
std::unique_ptr<ScTokenArray>
             }
             if( nFmla[ i ] == 0x06 )
             {
-                OUString aTmp(::read_zeroTerminated_uInt8s_ToOUString(maIn, 
maIn.GetStreamCharSet()));
+                OUString aTmp(::read_zeroTerminated_uInt8s_ToOUString(maIn, 
maIn.GetStreamEncoding()));
                 sStringArray[ nStringCount ] = aTmp;
                 nStringCount++;
                 SAFEDEC_OR_RET(nRef, aTmp.getLength() + 1, ConvErr::Count);
diff --git a/sc/source/ui/dbgui/asciiopt.cxx b/sc/source/ui/dbgui/asciiopt.cxx
index 3ef8150cc7a8..39d40d4531a8 100644
--- a/sc/source/ui/dbgui/asciiopt.cxx
+++ b/sc/source/ui/dbgui/asciiopt.cxx
@@ -125,7 +125,7 @@ void ScAsciiOptions::ReadFromString( std::u16string_view 
rString, SvStream* pStr
         if ( bDetectCharSet && pStream4Detect )
         {
             pStream4Detect->DetectEncoding();
-            eCharSet = pStream4Detect->GetStreamCharSet();
+            eCharSet = pStream4Detect->GetStreamEncoding();
         }
         else if (!bDetectCharSet)
             eCharSet = ScGlobal::GetCharsetValue( aToken );
diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx 
b/sc/source/ui/dbgui/scuiasciiopt.cxx
index 20fd26fa7ac6..088509e67146 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -373,7 +373,7 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, 
std::u16string_view aD
 
     // Detect character set only once and then use it for "Detect" option.
     mpDatStream->DetectEncoding();
-    meDetectedCharSet = mpDatStream->GetStreamCharSet();
+    meDetectedCharSet = mpDatStream->GetStreamEncoding();
     if (meDetectedCharSet == RTL_TEXTENCODING_DONTKNOW)
     {
         meDetectedCharSet = osl_getThreadTextEncoding();
@@ -534,7 +534,7 @@ bool ScImportAsciiDlg::GetLine( sal_uLong nLine, OUString 
&rText, sal_Unicode& r
         memset( mpRowPosArray.get(), 0, sizeof(mpRowPosArray[0]) * 
(ASCIIDLG_MAXROWS+2));
 
         Seek(0);
-        mpDatStream->StartReadingUnicodeText( mpDatStream->GetStreamCharSet() 
);
+        mpDatStream->StartReadingUnicodeText( mpDatStream->GetStreamEncoding() 
);
 
         mnStreamPos = mpDatStream->Tell();
         mpRowPosArray[mnRowPosCount] = mnStreamPos;
@@ -773,7 +773,7 @@ void ScImportAsciiDlg::UpdateVertical()
 {
     mnRowPosCount = 0;
     if (mpDatStream)
-        mpDatStream->SetStreamCharSet(meCharSet);
+        mpDatStream->SetStreamEncoding(meCharSet);
 }
 
 void ScImportAsciiDlg::RbSepFix()
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 3d1050f488a9..b72ef6a16219 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -1380,7 +1380,7 @@ bool ScDocShell::ConvertFrom( SfxMedium& rMedium )
                 SvStream* pInStream = rMedium.GetInStream();
                 if (pInStream)
                 {
-                    pInStream->SetStreamCharSet( aOptions.GetCharSet() );
+                    pInStream->SetStreamEncoding( aOptions.GetCharSet() );
                     pInStream->Seek( 0 );
                     bRet = aImpEx.ImportStream( *pInStream, 
rMedium.GetBaseURL(), SotClipboardFormatId::STRING );
                     eError = bRet ? ERRCODE_NONE : SCERR_IMPORT_CONNECT;
@@ -2025,8 +2025,8 @@ void ScDocShell::AsciiSave( SvStream& rStream, const 
ScImportOptions& rAsciiOpt,
     bool bShowFormulas    = rAsciiOpt.bSaveFormulas;
     bool bIncludeBOM      = rAsciiOpt.bIncludeBOM;
 
-    rtl_TextEncoding eOldCharSet = rStream.GetStreamCharSet();
-    rStream.SetStreamCharSet( eCharSet );
+    rtl_TextEncoding eOldCharSet = rStream.GetStreamEncoding();
+    rStream.SetStreamEncoding( eCharSet );
     SvStreamEndian nOldNumberFormatInt = rStream.GetEndian();
     OString aStrDelimEncoded;    // only used if not Unicode
     OUString aStrDelimDecoded;     // only used if context encoding
@@ -2430,7 +2430,7 @@ void ScDocShell::AsciiSave( SvStream& rStream, const 
ScImportOptions& rAsciiOpt,
         endlub( rStream );
     }
 
-    rStream.SetStreamCharSet( eOldCharSet );
+    rStream.SetStreamEncoding( eOldCharSet );
     rStream.SetEndian( nOldNumberFormatInt );
 }
 
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index 8780fe6ccf41..63475eef4e09 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -285,7 +285,7 @@ bool ScImportExport::ExportData( std::u16string_view 
rMimeType,
     SvMemoryStream aStrm;
     SotClipboardFormatId fmtId = 
SotExchange::GetFormatIdFromMimeType(rMimeType);
     if (fmtId == SotClipboardFormatId::STRING)
-        aStrm.SetStreamCharSet(RTL_TEXTENCODING_UNICODE);
+        aStrm.SetStreamEncoding(RTL_TEXTENCODING_UNICODE);
     // mba: no BaseURL for data exchange
     if (ExportStream(aStrm, OUString(), fmtId))
     {
@@ -323,7 +323,7 @@ bool ScImportExport::ImportString( const OUString& rText, 
SotClipboardFormatId n
             rtl_TextEncoding eEnc = osl_getThreadTextEncoding();
             OString aTmp( rText.getStr(), rText.getLength(), eEnc );
             SvMemoryStream aStrm( const_cast<char *>(aTmp.getStr()), 
aTmp.getLength() * sizeof(char), StreamMode::READ );
-            aStrm.SetStreamCharSet( eEnc );
+            aStrm.SetStreamEncoding( eEnc );
             aStrm.ResetEndianSwap(); //! no swapping in memory
             return ImportStream( aStrm, OUString(), nFmt );
         }
@@ -344,7 +344,7 @@ bool ScImportExport::ExportString( OUString& rText, 
SotClipboardFormatId nFmt )
     //  nSizeLimit not needed for OUString
 
     SvMemoryStream aStrm;
-    aStrm.SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
+    aStrm.SetStreamEncoding( RTL_TEXTENCODING_UNICODE );
     aStrm.ResetEndianSwap(); //! no swapping in memory
     // mba: no BaseURL for data exc
     if( ExportStream( aStrm, OUString(), nFmt ) )
@@ -369,7 +369,7 @@ bool ScImportExport::ExportByteString( OString& rText, 
rtl_TextEncoding eEnc, So
         nSizeLimit = SAL_MAX_UINT16;
 
     SvMemoryStream aStrm;
-    aStrm.SetStreamCharSet( eEnc );
+    aStrm.SetStreamEncoding( eEnc );
     aStrm.ResetEndianSwap(); //! no swapping in memory
     // mba: no BaseURL for data exchange
     if( ExportStream( aStrm, OUString(), nFmt ) )
@@ -910,7 +910,7 @@ bool ScImportExport::Text2Doc( SvStream& rStrm )
     SCCOL nEndCol = aRange.aEnd.Col();
     SCROW nEndRow = aRange.aEnd.Row();
     sal_uInt64 nOldPos = rStrm.Tell();
-    rStrm.StartReadingUnicodeText( rStrm.GetStreamCharSet() );
+    rStrm.StartReadingUnicodeText( rStrm.GetStreamEncoding() );
     bool   bData = !bSingle;
     if( !bSingle)
         bOk = StartPaste();
@@ -923,7 +923,7 @@ bool ScImportExport::Text2Doc( SvStream& rStrm )
         rStrm.Seek( nOldPos );
         for( ;; )
         {
-            rStrm.ReadUniOrByteStringLine( aLine, rStrm.GetStreamCharSet(), 
nArbitraryLineLengthLimit );
+            rStrm.ReadUniOrByteStringLine( aLine, rStrm.GetStreamEncoding(), 
nArbitraryLineLengthLimit );
             // tdf#125440 When inserting tab separated string, consider quotes 
as field markers
             DoubledQuoteMode mode = aLine.indexOf("    ") >= 0 ? 
DoubledQuoteMode::ESCAPE : DoubledQuoteMode::KEEP_ALL;
             if( rStrm.eof() )
@@ -1504,7 +1504,7 @@ bool ScImportExport::ExtText2Doc( SvStream& rStrm )
     sal_uInt64 const nRemaining = rStrm.remainingSize();
     std::unique_ptr<ScProgress> xProgress( new ScProgress( pDocSh,
             ScResId( STR_LOAD_DOC ), nRemaining, true ));
-    rStrm.StartReadingUnicodeText( rStrm.GetStreamCharSet() );
+    rStrm.StartReadingUnicodeText( rStrm.GetStreamEncoding() );
     // tdf#82254 - check whether to include a byte-order-mark in the output
     if (nOldPos != rStrm.Tell())
         mbIncludeBOM = true;
@@ -2062,7 +2062,7 @@ bool ScImportExport::Sylk2Doc( SvStream& rStrm )
         {
             //! allow unicode
             (void)rStrm.ReadLine( aByteLine );
-            aLine = OStringToOUString(aByteLine, rStrm.GetStreamCharSet());
+            aLine = OStringToOUString(aByteLine, rStrm.GetStreamEncoding());
             if( rStrm.eof() )
                 break;
             bool bInvalidCol = false;
@@ -2688,7 +2688,7 @@ ScImportStringStream::ScImportStringStream( const 
OUString& rStr )
     : SvMemoryStream( const_cast<sal_Unicode *>(rStr.getStr()),
             rStr.getLength() * sizeof(sal_Unicode), StreamMode::READ)
 {
-    SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
+    SetStreamEncoding( RTL_TEXTENCODING_UNICODE );
     ResetEndianSwap();
 }
 
@@ -2714,7 +2714,7 @@ Label_RetryWithNewSep:
     }
 
     OUString aStr;
-    rStream.ReadUniOrByteStringLine(aStr, rStream.GetStreamCharSet(), 
nArbitraryLineLengthLimit);
+    rStream.ReadUniOrByteStringLine(aStr, rStream.GetStreamEncoding(), 
nArbitraryLineLengthLimit);
 
     if (bEmbeddedLineBreak)
     {
@@ -2832,7 +2832,7 @@ Label_RetryWithNewSep:
             {
                 nLastOffset = aStr.getLength();
                 OUString aNext;
-                rStream.ReadUniOrByteStringLine(aNext, 
rStream.GetStreamCharSet(), nArbitraryLineLengthLimit);
+                rStream.ReadUniOrByteStringLine(aNext, 
rStream.GetStreamEncoding(), nArbitraryLineLengthLimit);
                 if (!rStream.eof())
                     aStr += "
" + aNext;
             }
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index 6bb34d55b74d..167415404a0f 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -1127,7 +1127,7 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
                     aExport.SetDelimiter( u'
 
                     SvMemoryStream aStream;
-                    aStream.SetStreamCharSet( RTL_TEXTENCODING_UNICODE );
+                    aStream.SetStreamEncoding( RTL_TEXTENCODING_UNICODE );
                     aStream.ResetEndianSwap();
                     aExport.ExportStream( aStream, OUString(), 
SotClipboardFormatId::STRING );
 
diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx
index b24b3c0320d2..1033468a7ac7 100644
--- a/sfx2/source/appl/sfxhelp.cxx
+++ b/sfx2/source/appl/sfxhelp.cxx
@@ -897,7 +897,7 @@ static bool impl_showOfflineHelp(const OUString& rURL, 
weld::Widget* pDialogPare
     ::utl::TempFileNamed aTempFile(u"NewHelp", true, aExtension, parent, false 
);
 
     SvStream* pStream = aTempFile.GetStream(StreamMode::WRITE);
-    pStream->SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+    pStream->SetStreamEncoding(RTL_TEXTENCODING_UTF8);
 
     OUString aTempStr = SHTML1 + SHTML2 +
         aBaseInstallPath + "/" + HelpLocaleString() + SHTML3 +
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index 70ddb66ead03..d8e0eae2206e 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -1051,7 +1051,7 @@ void SfxObjectShell::DetectCsvFilterOptions(SvStream& 
stream, OUString& aFilterO
     if (aCharSet == aDetect)
     {
         stream.DetectEncoding();
-        eCharSet = stream.GetStreamCharSet();
+        eCharSet = stream.GetStreamEncoding();
     }
     else if (!aCharSet.empty())
         eCharSet = o3tl::toInt32(aCharSet);
diff --git a/svl/source/items/macitem.cxx b/svl/source/items/macitem.cxx
index bd3dfccffcb8..1a538e164a25 100644
--- a/svl/source/items/macitem.cxx
+++ b/svl/source/items/macitem.cxx
@@ -97,7 +97,7 @@ void SvxMacroTableDtor::Read( SvStream& rStrm )
 
     auto nMacro = o3tl::make_unsigned(nReadMacro);
 
-    const size_t nMinStringSize = rStrm.GetStreamCharSet() == 
RTL_TEXTENCODING_UNICODE ? 4 : 2;
+    const size_t nMinStringSize = rStrm.GetStreamEncoding() == 
RTL_TEXTENCODING_UNICODE ? 4 : 2;
     size_t nMinRecordSize = 2 + 2*nMinStringSize;
     if( SVX_MACROTBL_VERSION40 <= nVersion )
         nMinRecordSize+=2;
diff --git a/svl/source/items/stringio.cxx b/svl/source/items/stringio.cxx
index 5345e165aa34..f408ec00ef63 100644
--- a/svl/source/items/stringio.cxx
+++ b/svl/source/items/stringio.cxx
@@ -23,12 +23,12 @@
 
 OUString readByteString(SvStream& rStream)
 {
-    return rStream.ReadUniOrByteString(rStream.GetStreamCharSet());
+    return rStream.ReadUniOrByteString(rStream.GetStreamEncoding());
 }
 
 void writeByteString(SvStream& rStream, std::u16string_view rString)
 {
-    rStream.WriteUniOrByteString(rString, rStream.GetStreamCharSet());
+    rStream.WriteUniOrByteString(rString, rStream.GetStreamEncoding());
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/misc/templatefoldercache.cxx 
b/svtools/source/misc/templatefoldercache.cxx
index 1b5d2c661cc1..97b01d45852e 100644
--- a/svtools/source/misc/templatefoldercache.cxx
+++ b/svtools/source/misc/templatefoldercache.cxx
@@ -278,7 +278,7 @@ namespace svt
             // #116281# Keep office installation relocatable. Never store
             // any direct references to office installation directory.
             sURL = m_xOfficeInstDirs->makeRelocatableURL( sURL );
-            m_rStorage.WriteUniOrByteString( sURL, 
m_rStorage.GetStreamCharSet() );
+            m_rStorage.WriteUniOrByteString( sURL, 
m_rStorage.GetStreamEncoding() );
         }
     };
 
@@ -356,7 +356,7 @@ namespace svt
             // initialize them with their (local) names
             while ( nChildren-- )
             {
-                OUString sURL = 
m_rStorage.ReadUniOrByteString(m_rStorage.GetStreamCharSet());
+                OUString sURL = 
m_rStorage.ReadUniOrByteString(m_rStorage.GetStreamEncoding());
                 sURL = m_xOfficeInstDirs->makeAbsoluteURL( sURL );
                 rChildren.push_back( new TemplateContent( INetURLObject( sURL 
) ) );
             }
@@ -671,7 +671,7 @@ namespace svt
         m_aPreviousState.reserve( nRootDirectories );
         while ( nRootDirectories-- )
         {
-            OUString sURL = 
m_pCacheStream->ReadUniOrByteString(m_pCacheStream->GetStreamCharSet());
+            OUString sURL = 
m_pCacheStream->ReadUniOrByteString(m_pCacheStream->GetStreamEncoding());
             // #116281# Keep office installation relocatable. Never store
             // any direct references to office installation directory.
             sURL = getOfficeInstDirs()->makeAbsoluteURL( sURL );
@@ -722,7 +722,7 @@ namespace svt
         }
 
         if ( m_pCacheStream )
-            m_pCacheStream->SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
+            m_pCacheStream->SetStreamEncoding( RTL_TEXTENCODING_UTF8 );
 
         return nullptr != m_pCacheStream;
     }
diff --git a/svx/source/svdraw/svdotxln.cxx b/svx/source/svdraw/svdotxln.cxx
index 6b07cf15552e..c8596a4e9544 100644
--- a/svx/source/svdraw/svdotxln.cxx
+++ b/svx/source/svdraw/svdotxln.cxx
@@ -217,7 +217,7 @@ bool SdrTextObj::LoadText(const OUString& rFileName, 
rtl_TextEncoding eCharSet)
 
     if( pIStm )
     {
-        pIStm->SetStreamCharSet(GetSOLoadTextEncoding(eCharSet));
+        pIStm->SetStreamEncoding(GetSOLoadTextEncoding(eCharSet));
 
         char cRTF[5];
         cRTF[4] = 0;
diff --git a/sw/source/core/edit/edtox.cxx b/sw/source/core/edit/edtox.cxx
index 437b5f41e182..46aef659f063 100644
--- a/sw/source/core/edit/edtox.cxx
+++ b/sw/source/core/edit/edtox.cxx
@@ -297,7 +297,7 @@ void SwEditShell::ApplyAutoMark()
         Push();
         // tdf#106899 - import tox concordance file using the appropriate 
character set
         rStrm.DetectEncoding();
-        rtl_TextEncoding eChrSet = rStrm.GetStreamCharSet();
+        rtl_TextEncoding eChrSet = rStrm.GetStreamEncoding();
         if (eChrSet == RTL_TEXTENCODING_DONTKNOW)
             eChrSet = ::osl_getThreadTextEncoding();
 
diff --git a/sw/source/filter/ascii/wrtasc.cxx 
b/sw/source/filter/ascii/wrtasc.cxx
index 9570dda31e2b..48a42d21cee6 100644
--- a/sw/source/filter/ascii/wrtasc.cxx
+++ b/sw/source/filter/ascii/wrtasc.cxx
@@ -121,8 +121,8 @@ ErrCode SwASCWriter::WriteStream()
         (RTL_TEXTENCODING_UCS2 == GetAsciiOptions().GetCharSet() ||
         RTL_TEXTENCODING_UTF8 == GetAsciiOptions().GetCharSet());
 
-    rtl_TextEncoding eOld = Strm().GetStreamCharSet();
-    Strm().SetStreamCharSet( GetAsciiOptions().GetCharSet() );
+    rtl_TextEncoding eOld = Strm().GetStreamEncoding();
+    Strm().SetStreamEncoding( GetAsciiOptions().GetCharSet() );
 
     // Output all areas of the pam into the ASC file
     do {
@@ -205,7 +205,7 @@ ErrCode SwASCWriter::WriteStream()
         }
     } while( CopyNextPam( &pPam ) ); // Until all pams are processed
 
-    Strm().SetStreamCharSet( eOld );
+    Strm().SetStreamEncoding( eOld );
 
     if( m_bShowProgress )
         ::EndProgress( m_pDoc->GetDocShell() );
diff --git a/sw/source/filter/basflt/iodetect.cxx 
b/sw/source/filter/basflt/iodetect.cxx
index e1a6312f2dd0..d136dd2ea070 100644
--- a/sw/source/filter/basflt/iodetect.cxx
+++ b/sw/source/filter/basflt/iodetect.cxx
@@ -245,7 +245,7 @@ bool SwIoSystem::IsDetectableText(const char* pBuf, 
sal_uLong &rLen,
 {
     SvMemoryStream aStream(const_cast<char*>(pBuf), rLen, StreamMode::READ);
     aStream.DetectEncoding();
-    rtl_TextEncoding eCharSet = aStream.GetStreamCharSet();
+    rtl_TextEncoding eCharSet = aStream.GetStreamEncoding();
     auto nBomSize = aStream.Tell();
     pBuf += nBomSize;
     rLen -= nBomSize;
diff --git a/sw/source/filter/md/swmd.cxx b/sw/source/filter/md/swmd.cxx
index c421ee372a01..ae6bd7757e8d 100644
--- a/sw/source/filter/md/swmd.cxx
+++ b/sw/source/filter/md/swmd.cxx
@@ -843,7 +843,7 @@ ErrCode SwMarkdownParser::CallParser()
 {
     // use utf8
     m_rInput.DetectEncoding();
-    const rtl_TextEncoding eSrcEnc = m_rInput.GetStreamCharSet();
+    const rtl_TextEncoding eSrcEnc = m_rInput.GetStreamEncoding();
     if (eSrcEnc == RTL_TEXTENCODING_DONTKNOW)
     {
         return ERRCODE_IO_INVALIDCHAR;
diff --git a/sw/source/filter/md/wrtmd.cxx b/sw/source/filter/md/wrtmd.cxx
index bc471e11a2a7..4b84e85abae0 100644
--- a/sw/source/filter/md/wrtmd.cxx
+++ b/sw/source/filter/md/wrtmd.cxx
@@ -1019,7 +1019,7 @@ ErrCode SwMDWriter::WriteStream()
 {
     CollectFlys();
 
-    Strm().SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+    Strm().SetStreamEncoding(RTL_TEXTENCODING_UTF8);
     if (m_bShowProgress)
         ::StartProgress(STR_STATSTR_W4WWRITE, 0, 
sal_Int32(m_pDoc->GetNodes().Count()),
                         m_pDoc->GetDocShell());
diff --git a/sw/source/ui/dbui/createaddresslistdialog.cxx 
b/sw/source/ui/dbui/createaddresslistdialog.cxx
index 9c3e3bfa5842..93a0ee900e9c 100644
--- a/sw/source/ui/dbui/createaddresslistdialog.cxx
+++ b/sw/source/ui/dbui/createaddresslistdialog.cxx
@@ -259,7 +259,7 @@ SwCreateAddressListDialog::SwCreateAddressListDialog(
         if(pStream)
         {
             pStream->SetLineDelimiter( LINEEND_LF );
-            pStream->SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+            pStream->SetStreamEncoding(RTL_TEXTENCODING_UTF8);
 
             OUString sLine;
             bool bRead = pStream->ReadByteStringLine( sLine, 
RTL_TEXTENCODING_UTF8 );
@@ -445,7 +445,7 @@ IMPL_LINK_NOARG(SwCreateAddressListDialog, OkHdl_Impl, 
weld::Button&, void)
     SfxMedium aMedium( m_sURL, StreamMode::READWRITE|StreamMode::TRUNC );
     SvStream* pStream = aMedium.GetOutStream();
     pStream->SetLineDelimiter( LINEEND_LF );
-    pStream->SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+    pStream->SetStreamEncoding(RTL_TEXTENCODING_UTF8);
 
     lcl_WriteValues(&(m_pCSVData->aDBColumnHeaders), pStream);
 
diff --git a/sw/source/ui/dbui/mmresultdialogs.cxx 
b/sw/source/ui/dbui/mmresultdialogs.cxx
index 796e251e46ba..827924702aa9 100644
--- a/sw/source/ui/dbui/mmresultdialogs.cxx
+++ b/sw/source/ui/dbui/mmresultdialogs.cxx
@@ -1209,7 +1209,7 @@ IMPL_LINK_NOARG(SwMMResultEmailDialog, 
SendDocumentsHdl_Impl, weld::Button&, voi
                 SfxMedium aMedium( aName.GetValue(),    StreamMode::READ);
                 SvStream* pInStream = aMedium.GetInStream();
                 if(pInStream)
-                    pInStream->SetStreamCharSet( eEncoding );
+                    pInStream->SetStreamEncoding( eEncoding );
                 else
                 {
                     OSL_FAIL("no output file created?");
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index 58fddcba88c3..09d75252b718 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -4007,7 +4007,7 @@ void SwEntryBrowseBox::ReadEntries(SvStream& rInStr)
     AutoMarkEntry* pToInsert = nullptr;
     // tdf#108910, tdf#125496 - read index entries using the appropriate 
character set
     rInStr.DetectEncoding();
-    rtl_TextEncoding eTEnc = rInStr.GetStreamCharSet();
+    rtl_TextEncoding eTEnc = rInStr.GetStreamEncoding();
     if (eTEnc == RTL_TEXTENCODING_DONTKNOW)
         eTEnc = osl_getThreadTextEncoding();
     while (rInStr.good())
@@ -4157,7 +4157,7 @@ IMPL_LINK_NOARG(SwAutoMarkDlg_Impl, OkHdl, weld::Button&, 
void)
                                     : StreamMode::WRITE| StreamMode::TRUNC );
         SvStream* pStrm = aMed.GetOutStream();
         // tdf#108910, tdf#125496 - write index entries using the utf8 text 
encoding
-        pStrm->SetStreamCharSet( RTL_TEXTENCODING_UTF8 );
+        pStrm->SetStreamEncoding( RTL_TEXTENCODING_UTF8 );
         if( !pStrm->GetError() )
         {
             m_xEntriesBB->WriteEntries( *pStrm );
diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index 26fa1b3bd0c1..0ece02476fa8 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -1000,7 +1000,7 @@ static rtl::Reference<SwMailMessage> 
lcl_CreateMailFromDoc(
         if( !pInStream )
             return pMessage;
 
-        pInStream->SetStreamCharSet( sMailEncoding );
+        pInStream->SetStreamEncoding( sMailEncoding );
         OStringBuffer sLine;
         while ( pInStream->ReadLine( sLine ) )
         {
diff --git a/sw/source/uibase/uiview/srcview.cxx 
b/sw/source/uibase/uiview/srcview.cxx
index be54760a804b..345f2a116a7a 100644
--- a/sw/source/uibase/uiview/srcview.cxx
+++ b/sw/source/uibase/uiview/srcview.cxx
@@ -225,7 +225,7 @@ SwSrcView::~SwSrcView()
 void SwSrcView::SaveContentTo(SfxMedium& rMed)
 {
     SvStream* pOutStream = rMed.GetOutStream();
-    pOutStream->SetStreamCharSet(lcl_GetStreamCharSet(m_eLoadEncoding));
+    pOutStream->SetStreamEncoding(lcl_GetStreamCharSet(m_eLoadEncoding));
     m_aEditWin->Write( *pOutStream );
 }
 
@@ -257,7 +257,7 @@ void SwSrcView::SaveContent(const OUString& rTmpFile)
 {
     SfxMedium aMedium( rTmpFile, StreamMode::WRITE);
     SvStream* pOutStream = aMedium.GetOutStream();
-    pOutStream->SetStreamCharSet( lcl_GetStreamCharSet(m_eLoadEncoding) );
+    pOutStream->SetStreamEncoding( lcl_GetStreamCharSet(m_eLoadEncoding) );
     m_aEditWin->Write(*pOutStream);
     aMedium.Commit();
 }
@@ -301,7 +301,7 @@ void SwSrcView::Execute(SfxRequest& rReq)
                 SfxMedium aMedium( xFP->getSelectedFiles().getConstArray()[0],
                                     StreamMode::WRITE | 
StreamMode::SHARE_DENYNONE );
                 SvStream* pOutStream = aMedium.GetOutStream();
-                
pOutStream->SetStreamCharSet(lcl_GetStreamCharSet(m_eLoadEncoding));
+                
pOutStream->SetStreamEncoding(lcl_GetStreamCharSet(m_eLoadEncoding));
                 m_aEditWin->Write( *pOutStream );
                 aMedium.Commit();
             }
@@ -326,7 +326,7 @@ void SwSrcView::Execute(SfxRequest& rReq)
                 SvStream* pOutStream = pMed->GetOutStream();
                 pOutStream->Seek(0);
                 pOutStream->SetStreamSize(0);
-                
pOutStream->SetStreamCharSet(lcl_GetStreamCharSet(m_eLoadEncoding));
+                
pOutStream->SetStreamEncoding(lcl_GetStreamCharSet(m_eLoadEncoding));
                 m_aEditWin->Write( *pOutStream );
                 pMed->CloseOutStream();
                 pMed->Commit();
@@ -783,7 +783,7 @@ void SwSrcView::Load(SwDocShell* pDocShell)
                 eDestEnc = eHeaderEnc;
                 m_aEditWin->SetTextEncoding(eDestEnc);
             }
-            pStream->SetStreamCharSet( eDestEnc );
+            pStream->SetStreamEncoding( eDestEnc );
             pStream->Seek(0);
             TextEngine* pTextEngine = m_aEditWin->GetTextEngine();
             pTextEngine->EnableUndo(false);
@@ -821,7 +821,7 @@ void SwSrcView::Load(SwDocShell* pDocShell)
             aMedium.Commit();
             SvStream* pInStream = aMedium.GetInStream();
             pInStream->Seek(0);
-            pInStream->SetStreamCharSet( eDestEnc );
+            pInStream->SetStreamEncoding( eDestEnc );
 
             m_aEditWin->Read(*pInStream);
         }
diff --git a/tools/source/inet/inetstrm.cxx b/tools/source/inet/inetstrm.cxx
index 2feaad7f1167..4166b4314b2c 100644
--- a/tools/source/inet/inetstrm.cxx
+++ b/tools/source/inet/inetstrm.cxx
@@ -233,7 +233,7 @@ INetMIMEMessageStream::INetMIMEMessageStream(
     nChildIndex(0)
 {
     assert(pMsg != nullptr);
-    maMsgBuffer.SetStreamCharSet(RTL_TEXTENCODING_ASCII_US);
+    maMsgBuffer.SetStreamEncoding(RTL_TEXTENCODING_ASCII_US);
     pRead = pWrite = mvBuffer.data();
 }
 
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx
index 40f2c8461244..77d06abfe0fd 100644
--- a/tools/source/stream/stream.cxx
+++ b/tools/source/stream/stream.cxx
@@ -283,7 +283,7 @@ SvStream::SvStream() :
 #else
    , m_eLineDelimiter(LINEEND_CRLF) // DOS-Format
 #endif
-   , m_eStreamCharSet(osl_getThreadTextEncoding())
+   , m_eStreamEncoding(osl_getThreadTextEncoding())
 
    , m_nCryptMask(0)
 
@@ -384,12 +384,12 @@ void SvStream::ResetError()
     ClearError();
 }
 
-bool SvStream::ReadByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcCharSet,
+bool SvStream::ReadByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcEncoding,
                                        sal_Int32 nMaxBytesToRead )
 {
     OStringBuffer aStr;
     bool bRet = ReadLine( aStr, nMaxBytesToRead);
-    rStr = OStringToOUString(aStr, eSrcCharSet);
+    rStr = OStringToOUString(aStr, eSrcEncoding);
     return bRet;
 }
 
@@ -560,13 +560,13 @@ bool SvStream::ReadUniStringLine( OUString& rStr, 
sal_Int32 nMaxCodepointsToRead
     return bEnd;
 }
 
-bool SvStream::ReadUniOrByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcCharSet,
+bool SvStream::ReadUniOrByteStringLine( OUString& rStr, rtl_TextEncoding 
eSrcEncoding,
                                             sal_Int32 nMaxCodepointsToRead )
 {
-    if ( eSrcCharSet == RTL_TEXTENCODING_UNICODE )
+    if (eSrcEncoding == RTL_TEXTENCODING_UNICODE)
         return ReadUniStringLine( rStr, nMaxCodepointsToRead );
     else
-        return ReadByteStringLine( rStr, eSrcCharSet, nMaxCodepointsToRead );
+        return ReadByteStringLine(rStr, eSrcEncoding, nMaxCodepointsToRead);
 }
 
 OString read_zeroTerminated_uInt8s_ToOString(SvStream& rStream)
@@ -640,9 +640,9 @@ static std::size_t write_uInt16s_FromOUString(SvStream& 
rStrm, std::u16string_vi
     return nWritten;
 }
 
-bool SvStream::WriteUnicodeOrByteText(std::u16string_view rStr, 
rtl_TextEncoding eDestCharSet, bool bZero)
+bool SvStream::WriteUnicodeOrByteText(std::u16string_view rStr, 
rtl_TextEncoding eDestEncoding, bool bZero)
 {
-    if ( eDestCharSet == RTL_TEXTENCODING_UNICODE )
+    if (eDestEncoding == RTL_TEXTENCODING_UNICODE)
     {
         write_uInt16s_FromOUString(*this, rStr, rStr.size());
         if (bZero)
@@ -650,7 +650,7 @@ bool SvStream::WriteUnicodeOrByteText(std::u16string_view 
rStr, rtl_TextEncoding
     }
     else
     {
-        OString aStr(OUStringToOString(rStr, eDestCharSet));
+        OString aStr(OUStringToOString(rStr, eDestEncoding));
         WriteBytes(aStr.getStr(), aStr.getLength());
         if (bZero)
             WriteChar(0);
@@ -658,9 +658,9 @@ bool SvStream::WriteUnicodeOrByteText(std::u16string_view 
rStr, rtl_TextEncoding
     return m_nError == ERRCODE_NONE;
 }
 
-bool SvStream::WriteByteStringLine( std::u16string_view rStr, rtl_TextEncoding 
eDestCharSet )
+bool SvStream::WriteByteStringLine(std::u16string_view rStr, rtl_TextEncoding 
eDestEncoding)
 {
-    return WriteLine(OUStringToOString(rStr, eDestCharSet));
+    return WriteLine(OUStringToOString(rStr, eDestEncoding));
 }
 
 bool SvStream::WriteLine(std::string_view rStr)
@@ -670,13 +670,13 @@ bool SvStream::WriteLine(std::string_view rStr)
     return m_nError == ERRCODE_NONE;
 }
 
-bool SvStream::WriteUniOrByteChar( sal_Unicode ch, rtl_TextEncoding 
eDestCharSet )
+bool SvStream::WriteUniOrByteChar(sal_Unicode ch, rtl_TextEncoding 
eDestEncoding)
 {
-    if ( eDestCharSet == RTL_TEXTENCODING_UNICODE )
+    if (eDestEncoding == RTL_TEXTENCODING_UNICODE)
         WriteUnicode(ch);
     else
     {
-        OString aStr(&ch, 1, eDestCharSet);
+        OString aStr(&ch, 1, eDestEncoding);
         WriteBytes(aStr.getStr(), aStr.getLength());
     }
     return m_nError == ERRCODE_NONE;
@@ -691,11 +691,11 @@ void SvStream::StartWritingUnicodeText()
     WriteUInt16(0xfeff);
 }
 
-void SvStream::StartReadingUnicodeText( rtl_TextEncoding eReadBomCharSet )
+void SvStream::StartReadingUnicodeText(rtl_TextEncoding eReadBomEncoding)
 {
-    if (!(  eReadBomCharSet == RTL_TEXTENCODING_DONTKNOW ||
-            eReadBomCharSet == RTL_TEXTENCODING_UNICODE ||
-            eReadBomCharSet == RTL_TEXTENCODING_UTF8))
+    if (!(  eReadBomEncoding == RTL_TEXTENCODING_DONTKNOW ||
+            eReadBomEncoding == RTL_TEXTENCODING_UNICODE ||
+            eReadBomEncoding == RTL_TEXTENCODING_UTF8))
         return;    // nothing to read
 
     const sal_uInt64 nOldPos = Tell();
@@ -705,8 +705,8 @@ void SvStream::StartReadingUnicodeText( rtl_TextEncoding 
eReadBomCharSet )
     switch ( nFlag )
     {
         case 0xfe: // UTF-16BE?
-            if (    eReadBomCharSet == RTL_TEXTENCODING_DONTKNOW ||
-                    eReadBomCharSet == RTL_TEXTENCODING_UNICODE)
+            if (    eReadBomEncoding == RTL_TEXTENCODING_DONTKNOW ||
+                    eReadBomEncoding == RTL_TEXTENCODING_UNICODE)
             {
                 ReadUChar(nFlag);
                 if (nFlag == 0xff)
@@ -717,8 +717,8 @@ void SvStream::StartReadingUnicodeText( rtl_TextEncoding 
eReadBomCharSet )
             }
         break;
         case 0xff: // UTF-16LE?
-            if (    eReadBomCharSet == RTL_TEXTENCODING_DONTKNOW ||
-                    eReadBomCharSet == RTL_TEXTENCODING_UNICODE)
+            if (    eReadBomEncoding == RTL_TEXTENCODING_DONTKNOW ||
+                    eReadBomEncoding == RTL_TEXTENCODING_UNICODE)
             {
                 ReadUChar(nFlag);
                 if (nFlag == 0xfe)
@@ -729,8 +729,8 @@ void SvStream::StartReadingUnicodeText( rtl_TextEncoding 
eReadBomCharSet )
             }
         break;
         case 0xef: // UTF-8?
-            if (    eReadBomCharSet == RTL_TEXTENCODING_DONTKNOW ||
-                    eReadBomCharSet == RTL_TEXTENCODING_UTF8)
+            if (    eReadBomEncoding == RTL_TEXTENCODING_DONTKNOW ||
+                    eReadBomEncoding == RTL_TEXTENCODING_UTF8)
             {
                 ReadUChar(nFlag);
                 if (nFlag == 0xbb)
@@ -783,7 +783,7 @@ void SvStream::DetectEncoding()
         });
 
     const sal_uInt64 nOrigPos = Tell();
-    SetStreamCharSet(RTL_TEXTENCODING_DONTKNOW);
+    SetStreamEncoding(RTL_TEXTENCODING_DONTKNOW);
     StartReadingUnicodeText(RTL_TEXTENCODING_DONTKNOW);
     if (!good())
         return;
@@ -791,12 +791,12 @@ void SvStream::DetectEncoding()
     const sal_uInt64 nBomSize = Tell() - nOrigPos;
     if (nBomSize == 2)
     {
-        SetStreamCharSet(RTL_TEXTENCODING_UCS2);
+        SetStreamEncoding(RTL_TEXTENCODING_UCS2);
         return;
     }
     if (nBomSize == 3)
     {
-        SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+        SetStreamEncoding(RTL_TEXTENCODING_UTF8);
         return;
     }
 
@@ -832,7 +832,7 @@ void SvStream::DetectEncoding()
         return;
 
     rtl_TextEncoding eEncoding = it->second;
-    SetStreamCharSet(eEncoding);
+    SetStreamEncoding(eEncoding);
     if (eEncoding == RTL_TEXTENCODING_UCS2)
     {
         if (it->first == "UTF-16LE")
@@ -1133,21 +1133,21 @@ sal_uInt64 SvStream::WriteStream( SvStream& rStream, 
sal_uInt64 nSize )
     return nSize - nWriteSize;
 }
 
-OUString SvStream::ReadUniOrByteString( rtl_TextEncoding eSrcCharSet )
+OUString SvStream::ReadUniOrByteString(rtl_TextEncoding eSrcEncoding)
 {
     // read UTF-16 string directly from stream ?
-    if (eSrcCharSet == RTL_TEXTENCODING_UNICODE)
+    if (eSrcEncoding == RTL_TEXTENCODING_UNICODE)
         return read_uInt32_lenPrefixed_uInt16s_ToOUString(*this);
-    return read_uInt16_lenPrefixed_uInt8s_ToOUString(*this, eSrcCharSet);
+    return read_uInt16_lenPrefixed_uInt8s_ToOUString(*this, eSrcEncoding);
 }
 
-SvStream& SvStream::WriteUniOrByteString( std::u16string_view rStr, 
rtl_TextEncoding eDestCharSet )
+SvStream& SvStream::WriteUniOrByteString(std::u16string_view rStr, 
rtl_TextEncoding eDestEncoding)
 {
     // write UTF-16 string directly into stream ?
-    if (eDestCharSet == RTL_TEXTENCODING_UNICODE)
+    if (eDestEncoding == RTL_TEXTENCODING_UNICODE)
         write_uInt32_lenPrefixed_uInt16s_FromOUString(*this, rStr);
     else
-        write_uInt16_lenPrefixed_uInt8s_FromOUString(*this, rStr, 
eDestCharSet);
+        write_uInt16_lenPrefixed_uInt8s_FromOUString(*this, rStr, 
eDestEncoding);
     return *this;
 }
 
@@ -1545,7 +1545,7 @@ SvStream& endlu( SvStream& rStrm )
 
 SvStream& endlub( SvStream& rStrm )
 {
-    if ( rStrm.GetStreamCharSet() == RTL_TEXTENCODING_UNICODE )
+    if (rStrm.GetStreamEncoding() == RTL_TEXTENCODING_UNICODE)
         return endlu( rStrm );
     else
         return endl( rStrm );
diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx
index 805d75588bde..a766172e4a5a 100644
--- a/vcl/source/edit/texteng.cxx
+++ b/vcl/source/edit/texteng.cxx
@@ -2415,12 +2415,12 @@ bool TextEngine::Read( SvStream& rInput, const 
TextSelection* pSel )
 
     OStringBuffer aLine;
     bool bDone = rInput.ReadLine( aLine );
-    OUString aTmpStr(OStringToOUString(aLine, rInput.GetStreamCharSet()));
+    OUString aTmpStr(OStringToOUString(aLine, rInput.GetStreamEncoding()));
     while ( bDone )
     {
         aSel = ImpInsertText( aSel, aTmpStr );
         bDone = rInput.ReadLine( aLine );
-        aTmpStr = OStringToOUString(aLine, rInput.GetStreamCharSet());
+        aTmpStr = OStringToOUString(aLine, rInput.GetStreamEncoding());
         if ( bDone )
             aSel = ImpInsertParaBreak( aSel.GetEnd() );
     }
@@ -2457,7 +2457,7 @@ void TextEngine::Write( SvStream& rOutput )
             ? aSel.GetEnd().GetIndex() : pNode->GetText().getLength();
 
         const OUString aText = pNode->GetText().copy( nStartPos, 
nEndPos-nStartPos );
-        rOutput.WriteLine(OUStringToOString(aText, 
rOutput.GetStreamCharSet()));
+        rOutput.WriteLine(OUStringToOString(aText, 
rOutput.GetStreamEncoding()));
     }
 }
 
diff --git a/vcl/source/filter/svm/SvmConverter.cxx 
b/vcl/source/filter/svm/SvmConverter.cxx
index 51d480f29e83..171b8140347c 100644
--- a/vcl/source/filter/svm/SvmConverter.cxx
+++ b/vcl/source/filter/svm/SvmConverter.cxx
@@ -659,7 +659,7 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, 
GDIMetaFile& rMtf )
                 ImplReadColor( rIStm, aActionColor ); aFont.SetFillColor( 
aActionColor );
                 size_t nRet = rIStm.ReadBytes(aName, LF_FACESIZE);
                 aName[nRet] = 0;
-                aFont.SetFamilyName( OUString( aName, strlen(aName), 
rIStm.GetStreamCharSet() ) );
+                aFont.SetFamilyName( OUString( aName, strlen(aName), 
rIStm.GetStreamEncoding() ) );
 
                 sal_Int32 nWidth(0), nHeight(0);
                 rIStm.ReadInt32(nWidth).ReadInt32(nHeight);
diff --git a/vcl/source/filter/svm/SvmReader.cxx 
b/vcl/source/filter/svm/SvmReader.cxx
index 24c03a6ef4c8..905816b4b4b4 100644
--- a/vcl/source/filter/svm/SvmReader.cxx
+++ b/vcl/source/filter/svm/SvmReader.cxx
@@ -47,7 +47,7 @@ public:
         , m_eOrigCharSet(m_rData.meActualCharSet)
     {
         ++m_rData.mnParseDepth;
-        m_rData.meActualCharSet = rIStm.GetStreamCharSet();
+        m_rData.meActualCharSet = rIStm.GetStreamEncoding();
     }
     bool TooDeep() const { return m_rData.mnParseDepth > 1024; }
     ~DepthGuard()
diff --git a/vcl/source/filter/svm/SvmWriter.cxx 
b/vcl/source/filter/svm/SvmWriter.cxx
index b6f3cee62138..53d18830311d 100644
--- a/vcl/source/filter/svm/SvmWriter.cxx
+++ b/vcl/source/filter/svm/SvmWriter.cxx
@@ -59,7 +59,7 @@ SvStream& SvmWriter::Write(const GDIMetaFile& rMetaFile)
 
     ImplMetaWriteData aWriteData;
 
-    aWriteData.meActualCharSet = mrStream.GetStreamCharSet();
+    aWriteData.meActualCharSet = mrStream.GetStreamEncoding();
 
     MetaAction* pAct = const_cast<GDIMetaFile&>(rMetaFile).FirstAction();
     while (pAct)
@@ -82,7 +82,7 @@ BitmapChecksum SvmWriter::GetChecksum(const GDIMetaFile& 
rMetaFile)
     BitmapChecksumOctetArray aBCOA;
     BitmapChecksum nCrc = 0;
 
-    aWriteData.meActualCharSet = aMemStm.GetStreamCharSet();
+    aWriteData.meActualCharSet = aMemStm.GetStreamEncoding();
 
     for (size_t i = 0, nObjCount = rMetaFile.GetActionSize(); i < nObjCount; 
i++)
     {
diff --git a/vcl/source/font/font.cxx b/vcl/source/font/font.cxx
index d84d2d28e6a2..5801873a8319 100644
--- a/vcl/source/font/font.cxx
+++ b/vcl/source/font/font.cxx
@@ -474,8 +474,8 @@ SvStream& ReadImplFont( SvStream& rIStm, ImplFont& 
rImplFont, tools::Long& rnNor
     bool            bTmp(false);
     sal_uInt8       nTmp8(0);
 
-    rImplFont.SetFamilyName( 
rIStm.ReadUniOrByteString(rIStm.GetStreamCharSet()) );
-    rImplFont.maStyleName = 
rIStm.ReadUniOrByteString(rIStm.GetStreamCharSet());
+    rImplFont.SetFamilyName( 
rIStm.ReadUniOrByteString(rIStm.GetStreamEncoding()) );
+    rImplFont.maStyleName = 
rIStm.ReadUniOrByteString(rIStm.GetStreamEncoding());
     TypeSerializer aSerializer(rIStm);
     aSerializer.readSize(rImplFont.maAverageFontSize);
 
@@ -552,8 +552,8 @@ SvStream& WriteImplFont( SvStream& rOStm, const ImplFont& 
rImplFont, tools::Long
     VersionCompatWrite aCompat( rOStm, 5 );
 
     TypeSerializer aSerializer(rOStm);
-    rOStm.WriteUniOrByteString( rImplFont.GetFamilyName(), 
rOStm.GetStreamCharSet() );
-    rOStm.WriteUniOrByteString( rImplFont.GetStyleName(), 
rOStm.GetStreamCharSet() );
+    rOStm.WriteUniOrByteString( rImplFont.GetFamilyName(), 
rOStm.GetStreamEncoding() );
+    rOStm.WriteUniOrByteString( rImplFont.GetStyleName(), 
rOStm.GetStreamEncoding() );
     aSerializer.writeSize(rImplFont.maAverageFontSize);
 
     rOStm.WriteUInt16( GetStoreCharSet( rImplFont.GetCharSet() ) );
diff --git a/vcl/source/gdi/TypeSerializer.cxx 
b/vcl/source/gdi/TypeSerializer.cxx
index a8e7b17a5332..da83303cfdbc 100644
--- a/vcl/source/gdi/TypeSerializer.cxx
+++ b/vcl/source/gdi/TypeSerializer.cxx
@@ -399,7 +399,7 @@ void TypeSerializer::writeGraphic(const Graphic& rGraphic)
                     
pVectorGraphicData->getBinaryDataContainer().writeToStream(mrStream);
 
                     // For backwards compatibility, used to serialize path
-                    mrStream.WriteUniOrByteString(u"", 
mrStream.GetStreamCharSet());
+                    mrStream.WriteUniOrByteString(u"", 
mrStream.GetStreamEncoding());
                 }
                 else if (aGraphic.IsAnimated())
                 {
diff --git a/vcl/source/gdi/jobset.cxx b/vcl/source/gdi/jobset.cxx
index 4ac341f47e59..b3d8710ac38c 100644
--- a/vcl/source/gdi/jobset.cxx
+++ b/vcl/source/gdi/jobset.cxx
@@ -255,7 +255,7 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& 
rJobSetup )
 
             rtl_TextEncoding aStreamEncoding = RTL_TEXTENCODING_UTF8;
             if( nSystem == JOBSET_FILE364_SYSTEM )
-                aStreamEncoding = rIStream.GetStreamCharSet();
+                aStreamEncoding = rIStream.GetStreamEncoding();
 
             ImplJobSetup& rJobData = rJobSetup.ImplGetData();
 
commit 610168656a6fdacbd05afe7a85869a173e7455ef
Author:     Mike Kaganski <[email protected]>
AuthorDate: Wed Feb 25 11:13:12 2026 +0500
Commit:     Mike Kaganski <[email protected]>
CommitDate: Wed Feb 25 10:33:49 2026 +0100

    Move encoding detection to SvStream
    
    Allows to avoid similar code in SwIoSystem and SfxObjectShell, and
    unifies the code.
    
    Change-Id: I16817f2aea5bdabb9bf3505f2f3c2f697e3106e8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200284
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>

diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index a54ad4733765..a5cd05467e46 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -455,7 +455,6 @@ public:
     const css::uno::Sequence< css::beans::PropertyValue >& 
GetModifyPasswordInfo() const;
     bool                        SetModifyPasswordInfo( const 
css::uno::Sequence< css::beans::PropertyValue >& aInfo );
 
-    static void                 DetectCharSet(SvStream& stream, 
rtl_TextEncoding& eCharSet, SvStreamEndian& endian);
     static void                 DetectCsvSeparators(SvStream& stream, 
rtl_TextEncoding eCharSet, OUString& separators, sal_Unicode cStringDelimiter);
     static void                 DetectCsvFilterOptions(SvStream& stream, 
OUString& aFilterOptions);
     static void                 DetectFilterOptions(SfxMedium* pMedium);
diff --git a/include/tools/stream.hxx b/include/tools/stream.hxx
index 43c2b028d36c..5616c3604b33 100644
--- a/include/tools/stream.hxx
+++ b/include/tools/stream.hxx
@@ -326,6 +326,12 @@ public:
         encoding and switch endian swapping if UTF-16 and 0xfffe. */
     void            StartReadingUnicodeText( rtl_TextEncoding eReadBomCharSet 
);
 
+    /** Try StartWritingUnicodeText; if failed, use ICU to detect encoding 
from data.
+        After the function, the position is after BOM (if any); 
GetStreamCharSet
+        returns the detected encoding; GetEndian returns the detected 
endianness
+        (for UTF-16). */
+    void DetectEncoding();
+
     /** Read a line of Unicode.
 
         @param nMaxCodepointsToRead
diff --git a/sc/source/ui/dbgui/asciiopt.cxx b/sc/source/ui/dbgui/asciiopt.cxx
index 6c48d5c41511..3ef8150cc7a8 100644
--- a/sc/source/ui/dbgui/asciiopt.cxx
+++ b/sc/source/ui/dbgui/asciiopt.cxx
@@ -121,13 +121,11 @@ void ScAsciiOptions::ReadFromString( std::u16string_view 
rString, SvStream* pStr
     if ( nPos >= 0 )
     {
         const std::u16string_view aToken = o3tl::getToken(rString, 0, ',', 
nPos);
-        SvStreamEndian endian;
         bool bDetectCharSet = aToken == pStrDet;
         if ( bDetectCharSet && pStream4Detect )
         {
-            SfxObjectShell::DetectCharSet(*pStream4Detect, eCharSet, endian);
-            if (eCharSet == RTL_TEXTENCODING_UNICODE)
-                pStream4Detect->SetEndian(endian);
+            pStream4Detect->DetectEncoding();
+            eCharSet = pStream4Detect->GetStreamCharSet();
         }
         else if (!bDetectCharSet)
             eCharSet = ScGlobal::GetCharsetValue( aToken );
diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx 
b/sc/source/ui/dbgui/scuiasciiopt.cxx
index f6dd6db1774c..20fd26fa7ac6 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -372,11 +372,9 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, 
std::u16string_view aD
         mxRbDetectSep->set_active(true);
 
     // Detect character set only once and then use it for "Detect" option.
-    SvStreamEndian eEndian;
-    SfxObjectShell::DetectCharSet(*mpDatStream, meDetectedCharSet, eEndian);
-    if (meDetectedCharSet == RTL_TEXTENCODING_UNICODE)
-        mpDatStream->SetEndian(eEndian);
-    else if ( meDetectedCharSet == RTL_TEXTENCODING_DONTKNOW )
+    mpDatStream->DetectEncoding();
+    meDetectedCharSet = mpDatStream->GetStreamCharSet();
+    if (meDetectedCharSet == RTL_TEXTENCODING_DONTKNOW)
     {
         meDetectedCharSet = osl_getThreadTextEncoding();
         // Prefer UTF-8, as UTF-16 would have already been detected from the 
stream.
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index 8c5e423dcb7f..70ddb66ead03 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -125,7 +125,6 @@
 #include <guisaveas.hxx>
 #include "objstor.hxx"
 #include "exoticfileloadexception.hxx"
-#include <unicode/ucsdet.h>
 #include <o3tl/string_view.hxx>
 
 using namespace ::com::sun::star;
@@ -881,78 +880,6 @@ bool SfxObjectShell::DoLoadExternal( SfxMedium *pMed )
     return LoadExternal(*pMedium);
 }
 
-const ::std::unordered_map<std::string, rtl_TextEncoding>  mapCharSets =
-                            {{"UTF-8", RTL_TEXTENCODING_UTF8},
-                            {"UTF-16BE", RTL_TEXTENCODING_UCS2},
-                            {"UTF-16LE", RTL_TEXTENCODING_UCS2},
-                            {"UTF-32BE", RTL_TEXTENCODING_UCS4},
-                            {"UTF-32LE", RTL_TEXTENCODING_UCS4},
-                            {"Shift_JIS", RTL_TEXTENCODING_SHIFT_JIS},
-                            {"ISO-2022-JP", RTL_TEXTENCODING_ISO_2022_JP},
-                            {"ISO-2022-CN", RTL_TEXTENCODING_ISO_2022_CN},
-                            {"ISO-2022-KR", RTL_TEXTENCODING_ISO_2022_KR},
-                            {"GB18030", RTL_TEXTENCODING_GB_18030},
-                            {"Big5", RTL_TEXTENCODING_BIG5},
-                            {"EUC-JP", RTL_TEXTENCODING_EUC_JP},
-                            {"EUC-KR", RTL_TEXTENCODING_EUC_KR},
-                            {"ISO-8859-1", RTL_TEXTENCODING_ISO_8859_1},
-                            {"ISO-8859-2", RTL_TEXTENCODING_ISO_8859_2},
-                            {"ISO-8859-5", RTL_TEXTENCODING_ISO_8859_5},
-                            {"ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6},
-                            {"ISO-8859-7", RTL_TEXTENCODING_ISO_8859_7},
-                            {"ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8},
-                            {"ISO-8859-9", RTL_TEXTENCODING_ISO_8859_9},
-                            {"windows-1250", RTL_TEXTENCODING_MS_1250},
-                            {"windows-1251", RTL_TEXTENCODING_MS_1251},
-                            {"windows-1252", RTL_TEXTENCODING_MS_1252},
-                            {"windows-1253", RTL_TEXTENCODING_MS_1253},
-                            {"windows-1254", RTL_TEXTENCODING_MS_1254},
-                            {"windows-1255", RTL_TEXTENCODING_MS_1255},
-                            {"windows-1256", RTL_TEXTENCODING_MS_1256},
-                            {"KOI8-R", RTL_TEXTENCODING_KOI8_R}};
-
-void SfxObjectShell::DetectCharSet(SvStream& stream, rtl_TextEncoding& 
eCharSet, SvStreamEndian &endian)
-{
-    constexpr size_t buffsize = 4096;
-    sal_Int8 bytes[buffsize] = { 0 };
-    sal_uInt64 nInitPos = stream.Tell();
-    sal_Int32 nRead = stream.ReadBytes(bytes, buffsize);
-
-    stream.Seek(nInitPos);
-    eCharSet = RTL_TEXTENCODING_DONTKNOW;
-
-    if (!nRead)
-        return;
-
-    UErrorCode uerr = U_ZERO_ERROR;
-    UCharsetDetector* ucd = ucsdet_open(&uerr);
-    if (!U_SUCCESS(uerr))
-        return;
-
-    const UCharsetMatch* match = nullptr;
-    const char* pEncodingName = nullptr;
-    ucsdet_setText(ucd, reinterpret_cast<const char*>(bytes), nRead, &uerr);
-    if (U_SUCCESS(uerr))
-        match = ucsdet_detect(ucd, &uerr);
-
-    if (U_SUCCESS(uerr))
-        pEncodingName = ucsdet_getName(match, &uerr);
-
-    if (U_SUCCESS(uerr) && pEncodingName)
-    {
-        const auto it = mapCharSets.find(pEncodingName);
-        if (it != mapCharSets.end())
-            eCharSet = it->second;
-
-        if (eCharSet == RTL_TEXTENCODING_UNICODE && !strcmp("UTF-16LE", 
pEncodingName))
-            endian = SvStreamEndian::LITTLE;
-        else if (eCharSet == RTL_TEXTENCODING_UNICODE && !strcmp("UTF-16BE", 
pEncodingName))
-            endian = SvStreamEndian::BIG;
-    }
-
-    ucsdet_close(ucd);
-}
-
 void SfxObjectShell::DetectCsvSeparators(SvStream& stream, rtl_TextEncoding 
eCharSet, OUString& separators, sal_Unicode cStringDelimiter)
 {
     OUString sLine;
@@ -1123,10 +1050,8 @@ void SfxObjectShell::DetectCsvFilterOptions(SvStream& 
stream, OUString& aFilterO
     // Detect charset
     if (aCharSet == aDetect)
     {
-        SvStreamEndian endian;
-        DetectCharSet(stream, eCharSet, endian);
-        if (eCharSet == RTL_TEXTENCODING_UNICODE)
-            stream.SetEndian(endian);
+        stream.DetectEncoding();
+        eCharSet = stream.GetStreamCharSet();
     }
     else if (!aCharSet.empty())
         eCharSet = o3tl::toInt32(aCharSet);
diff --git a/sw/inc/iodetect.hxx b/sw/inc/iodetect.hxx
index 1ab043a6cffc..0770731aaeba 100644
--- a/sw/inc/iodetect.hxx
+++ b/sw/inc/iodetect.hxx
@@ -108,8 +108,6 @@ public:
     static bool IsValidStgFilter( SotStorage& , const SfxFilter& );
     static bool IsValidStgFilter( const css::uno::Reference < 
css::embed::XStorage >& rStg, const SfxFilter& rFilter);
 
-    // tdf#106899 - wrapper around IsDetectableText to retrieve the text 
encoding for a given stream
-    SW_DLLPUBLIC static rtl_TextEncoding GetTextEncoding(SvStream&);
     static bool IsDetectableText( const char* pBuf, sal_uLong &rLen,
             rtl_TextEncoding *pCharSet, bool *pSwap, LineEnd *pLineEnd, bool 
*pBom);
 
diff --git a/sw/source/core/edit/edtox.cxx b/sw/source/core/edit/edtox.cxx
index 59320c2e768e..437b5f41e182 100644
--- a/sw/source/core/edit/edtox.cxx
+++ b/sw/source/core/edit/edtox.cxx
@@ -296,7 +296,8 @@ void SwEditShell::ApplyAutoMark()
         SvStream& rStrm = *aMedium.GetInStream();
         Push();
         // tdf#106899 - import tox concordance file using the appropriate 
character set
-        rtl_TextEncoding eChrSet = SwIoSystem::GetTextEncoding(rStrm);
+        rStrm.DetectEncoding();
+        rtl_TextEncoding eChrSet = rStrm.GetStreamCharSet();
         if (eChrSet == RTL_TEXTENCODING_DONTKNOW)
             eChrSet = ::osl_getThreadTextEncoding();
 
diff --git a/sw/source/filter/basflt/iodetect.cxx 
b/sw/source/filter/basflt/iodetect.cxx
index 5e2acab50033..e1a6312f2dd0 100644
--- a/sw/source/filter/basflt/iodetect.cxx
+++ b/sw/source/filter/basflt/iodetect.cxx
@@ -240,87 +240,15 @@ std::shared_ptr<const SfxFilter> 
SwIoSystem::GetFileFilter(const OUString& rFile
     return SwIoSystem::GetFilterOfFormat(FILTER_TEXT);
 }
 
-rtl_TextEncoding SwIoSystem::GetTextEncoding(SvStream& rStrm)
-{
-    sal_uLong nLen, nOrig;
-    char aBuf[4096];
-    nOrig = nLen = rStrm.ReadBytes(aBuf, sizeof(aBuf));
-
-    rtl_TextEncoding eCharSet = RTL_TEXTENCODING_DONTKNOW;
-    const bool bRet = SwIoSystem::IsDetectableText(aBuf, nLen, &eCharSet, 
nullptr, nullptr, nullptr);
-    if (bRet && eCharSet != RTL_TEXTENCODING_DONTKNOW)
-        rStrm.SeekRel(-(tools::Long(nLen)));
-    else
-        rStrm.SeekRel(-(tools::Long(nOrig)));
-
-    return eCharSet;
-}
-
 bool SwIoSystem::IsDetectableText(const char* pBuf, sal_uLong &rLen,
     rtl_TextEncoding *pCharSet, bool *pSwap, LineEnd *pLineEnd, bool *pBom)
 {
-    bool bSwap = false;
-    rtl_TextEncoding eCharSet = RTL_TEXTENCODING_DONTKNOW;
-    bool bLE = true;
-    bool bBom = false;
-    /*See if it's a known unicode type*/
-    if (rLen >= 2)
-    {
-        sal_uLong nHead=0;
-        if (rLen > 2 && sal_uInt8(pBuf[0]) == 0xEF && sal_uInt8(pBuf[1]) == 
0xBB &&
-            sal_uInt8(pBuf[2]) == 0xBF)
-        {
-            eCharSet = RTL_TEXTENCODING_UTF8;
-            nHead = 3;
-            bBom = true;
-        }
-        else if (sal_uInt8(pBuf[0]) == 0xFE && sal_uInt8(pBuf[1]) == 0xFF)
-        {
-            eCharSet = RTL_TEXTENCODING_UCS2;
-            bLE = false;
-            nHead = 2;
-            bBom = true;
-        }
-        else if (sal_uInt8(pBuf[1]) == 0xFE && sal_uInt8(pBuf[0]) == 0xFF)
-        {
-            eCharSet = RTL_TEXTENCODING_UCS2;
-            nHead = 2;
-            bBom = true;
-        }
-        pBuf+=nHead;
-        rLen-=nHead;
-    }
-    /*See unicode type again without BOM*/
-    if (rLen >= 1 && eCharSet == RTL_TEXTENCODING_DONTKNOW)
-    {
-        UErrorCode uerr = U_ZERO_ERROR;
-        UCharsetDetector* ucd = ucsdet_open(&uerr);
-        ucsdet_setText(ucd, pBuf, rLen, &uerr);
-        if (const UCharsetMatch* match = ucsdet_detect(ucd, &uerr))
-        {
-            const char* pEncodingName = ucsdet_getName(match, &uerr);
-
-            if (U_SUCCESS(uerr) && !strcmp("UTF-8", pEncodingName))
-            {
-                eCharSet = RTL_TEXTENCODING_UTF8; // UTF-8
-            }
-            else if (U_SUCCESS(uerr) && !strcmp("UTF-16BE", pEncodingName))
-            {
-                eCharSet = RTL_TEXTENCODING_UCS2; // UTF-16BE
-                bLE = false;
-            }
-            else if (U_SUCCESS(uerr) && !strcmp("UTF-16LE", pEncodingName))
-            {
-                eCharSet = RTL_TEXTENCODING_UCS2; // UTF-16LE
-            }
-            else if (U_SUCCESS(uerr) && !strcmp("GB18030", pEncodingName))
-            {
-                eCharSet = RTL_TEXTENCODING_GB_18030;
-            }
-        }
-
-        ucsdet_close(ucd);
-    }
+    SvMemoryStream aStream(const_cast<char*>(pBuf), rLen, StreamMode::READ);
+    aStream.DetectEncoding();
+    rtl_TextEncoding eCharSet = aStream.GetStreamCharSet();
+    auto nBomSize = aStream.Tell();
+    pBuf += nBomSize;
+    rLen -= nBomSize;
 
     bool bCR = false, bLF = false, bIsBareUnicode = false;
 
@@ -352,14 +280,8 @@ bool SwIoSystem::IsDetectableText(const char* pBuf, 
sal_uLong &rLen,
         {
             nNewLen = rLen/2;
             memcpy(pNewBuf, pBuf, rLen);
-#ifdef OSL_LITENDIAN
-            bool const bNativeLE = true;
-#else
-            bool const bNativeLE = false;
-#endif
-            if (bLE != bNativeLE)
+            if (aStream.IsEndianSwap())
             {
-                bSwap = true;
                 for (sal_uLong n = 0; n < nNewLen; ++n)
                     pNewBuf[n] = OSL_SWAPWORD(pNewBuf[n]);
             }
@@ -417,11 +339,11 @@ bool SwIoSystem::IsDetectableText(const char* pBuf, 
sal_uLong &rLen,
     if (pCharSet)
         *pCharSet = eCharSet;
     if (pSwap)
-        *pSwap = bSwap;
+        *pSwap = aStream.IsEndianSwap();
     if (pLineEnd)
         *pLineEnd = eLineEnd;
     if (pBom)
-        *pBom = bBom;
+        *pBom = nBomSize != 0;
 
     return !bIsBareUnicode;
 }
diff --git a/sw/source/filter/md/swmd.cxx b/sw/source/filter/md/swmd.cxx
index 8581c9aafe17..c421ee372a01 100644
--- a/sw/source/filter/md/swmd.cxx
+++ b/sw/source/filter/md/swmd.cxx
@@ -842,28 +842,13 @@ ErrCodeMsg MarkdownReader::Read(SwDoc& rDoc, const 
OUString& rBaseURL, SwPaM& rP
 ErrCode SwMarkdownParser::CallParser()
 {
     // use utf8
-    m_rInput.StartReadingUnicodeText(RTL_TEXTENCODING_DONTKNOW);
-    if (!m_rInput.good())
+    m_rInput.DetectEncoding();
+    const rtl_TextEncoding eSrcEnc = m_rInput.GetStreamCharSet();
+    if (eSrcEnc == RTL_TEXTENCODING_DONTKNOW)
     {
         return ERRCODE_IO_INVALIDCHAR;
     }
 
-    rtl_TextEncoding eSrcEnc;
-    const sal_uInt64 nPos = m_rInput.Tell(); //bom size
-    if (nPos == 2)
-        eSrcEnc = RTL_TEXTENCODING_UCS2;
-    else if (nPos == 3)
-        eSrcEnc = RTL_TEXTENCODING_UTF8;
-    else
-    {
-        SvStreamEndian eEndian;
-        SfxObjectShell::DetectCharSet(m_rInput, eSrcEnc, eEndian);
-        if (eSrcEnc == RTL_TEXTENCODING_DONTKNOW)
-            return ERRCODE_IO_INVALIDCHAR;
-        m_rInput.SetEndian(eEndian);
-    }
-
-    m_rInput.ResetError();
     const sal_uInt64 nFilesize = m_rInput.remainingSize();
     OString sUtf8Data;
 
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index c17253bf676b..58fddcba88c3 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -4006,7 +4006,8 @@ void SwEntryBrowseBox::ReadEntries(SvStream& rInStr)
 {
     AutoMarkEntry* pToInsert = nullptr;
     // tdf#108910, tdf#125496 - read index entries using the appropriate 
character set
-    rtl_TextEncoding eTEnc = SwIoSystem::GetTextEncoding(rInStr);
+    rInStr.DetectEncoding();
+    rtl_TextEncoding eTEnc = rInStr.GetStreamCharSet();
     if (eTEnc == RTL_TEXTENCODING_DONTKNOW)
         eTEnc = osl_getThreadTextEncoding();
     while (rInStr.good())
diff --git a/tools/Library_tl.mk b/tools/Library_tl.mk
index 5c3a7e453137..44a97499491e 100644
--- a/tools/Library_tl.mk
+++ b/tools/Library_tl.mk
@@ -108,6 +108,10 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,tl,\
 
 $(eval $(call gb_Library_use_externals,tl,\
        boost_headers \
+       frozen \
+       icu_headers \
+       icui18n \
+       icuuc \
        zlib \
        libxml2 \
 ))
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx
index e9775d4b3524..40f2c8461244 100644
--- a/tools/source/stream/stream.cxx
+++ b/tools/source/stream/stream.cxx
@@ -39,6 +39,12 @@
 
 #include <comphelper/fileformat.h>
 #include <comphelper/fileurl.hxx>
+#include <comphelper/scopeguard.hxx>
+
+#include <unicode/ucsdet.h>
+
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
 static void swapNibbles(unsigned char &c)
 {
@@ -742,6 +748,100 @@ void SvStream::StartReadingUnicodeText( rtl_TextEncoding 
eReadBomCharSet )
         Seek(nOldPos);      // no BOM, pure data
 }
 
+void SvStream::DetectEncoding()
+{
+    static constexpr auto mapEncodings
+        = frozen::make_unordered_map<std::string_view, rtl_TextEncoding>({
+            { "UTF-8", RTL_TEXTENCODING_UTF8 },
+            { "UTF-16BE", RTL_TEXTENCODING_UCS2 },
+            { "UTF-16LE", RTL_TEXTENCODING_UCS2 },
+            //{ "UTF-32BE", RTL_TEXTENCODING_UCS4 },
+            //{ "UTF-32LE", RTL_TEXTENCODING_UCS4 },
+            { "Shift_JIS", RTL_TEXTENCODING_SHIFT_JIS },
+            { "ISO-2022-JP", RTL_TEXTENCODING_ISO_2022_JP },
+            { "ISO-2022-CN", RTL_TEXTENCODING_ISO_2022_CN },
+            { "ISO-2022-KR", RTL_TEXTENCODING_ISO_2022_KR },
+            { "GB18030", RTL_TEXTENCODING_GB_18030 },
+            { "Big5", RTL_TEXTENCODING_BIG5 },
+            { "EUC-JP", RTL_TEXTENCODING_EUC_JP },
+            { "EUC-KR", RTL_TEXTENCODING_EUC_KR },
+            { "ISO-8859-1", RTL_TEXTENCODING_ISO_8859_1 },
+            { "ISO-8859-2", RTL_TEXTENCODING_ISO_8859_2 },
+            { "ISO-8859-5", RTL_TEXTENCODING_ISO_8859_5 },
+            { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6 },
+            { "ISO-8859-7", RTL_TEXTENCODING_ISO_8859_7 },
+            { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8 },
+            { "ISO-8859-9", RTL_TEXTENCODING_ISO_8859_9 },
+            { "windows-1250", RTL_TEXTENCODING_MS_1250 },
+            { "windows-1251", RTL_TEXTENCODING_MS_1251 },
+            { "windows-1252", RTL_TEXTENCODING_MS_1252 },
+            { "windows-1253", RTL_TEXTENCODING_MS_1253 },
+            { "windows-1254", RTL_TEXTENCODING_MS_1254 },
+            { "windows-1255", RTL_TEXTENCODING_MS_1255 },
+            { "windows-1256", RTL_TEXTENCODING_MS_1256 },
+            { "KOI8-R", RTL_TEXTENCODING_KOI8_R },
+        });
+
+    const sal_uInt64 nOrigPos = Tell();
+    SetStreamCharSet(RTL_TEXTENCODING_DONTKNOW);
+    StartReadingUnicodeText(RTL_TEXTENCODING_DONTKNOW);
+    if (!good())
+        return;
+
+    const sal_uInt64 nBomSize = Tell() - nOrigPos;
+    if (nBomSize == 2)
+    {
+        SetStreamCharSet(RTL_TEXTENCODING_UCS2);
+        return;
+    }
+    if (nBomSize == 3)
+    {
+        SetStreamCharSet(RTL_TEXTENCODING_UTF8);
+        return;
+    }
+
+    assert(nBomSize == 0); // we are at nOrigPos
+    char bytes[4096] = { 0 };
+    size_t nRead = ReadBytes(bytes, sizeof(bytes));
+    Seek(nOrigPos);
+    ResetError();
+
+    if (nRead == 0)
+        return;
+
+    UErrorCode uerr = U_ZERO_ERROR;
+    UCharsetDetector* ucd = ucsdet_open(&uerr);
+    if (!U_SUCCESS(uerr))
+        return;
+    comphelper::ScopeGuard ucsdet_close_guard([ucd] { ucsdet_close(ucd); });
+
+    ucsdet_setText(ucd, bytes, nRead, &uerr);
+    if (!U_SUCCESS(uerr))
+        return;
+
+    const UCharsetMatch* match = ucsdet_detect(ucd, &uerr);
+    if (!U_SUCCESS(uerr))
+        return;
+
+    const char* pEncodingName = ucsdet_getName(match, &uerr);
+    if (!U_SUCCESS(uerr) || !pEncodingName)
+        return;
+
+    const auto it = mapEncodings.find(pEncodingName);
+    if (it == mapEncodings.end())
+        return;
+
+    rtl_TextEncoding eEncoding = it->second;
+    SetStreamCharSet(eEncoding);
+    if (eEncoding == RTL_TEXTENCODING_UCS2)
+    {
+        if (it->first == "UTF-16LE")
+            SetEndian(SvStreamEndian::LITTLE);
+        else if (it->first == "UTF-16BE")
+            SetEndian(SvStreamEndian::BIG);
+    }
+}
+
 sal_uInt64 SvStream::SeekRel(sal_Int64 const nPos)
 {
     sal_uInt64 nActualPos = Tell();

Reply via email to