diff --git a/fsencoding.cc b/fsencoding.cc index 822a08cc..64aef4ec 100644 --- a/fsencoding.cc +++ b/fsencoding.cc @@ -21,7 +21,7 @@ string encode( wstring const & str ) string encode( string const & str ) { #ifdef __WIN32 - return str; + return string( str ); #else return string( QString::fromUtf8( str.c_str() ).toLocal8Bit().data() ); #endif diff --git a/wstring_qt.cc b/wstring_qt.cc index 94febc69..aa9d9f6a 100644 --- a/wstring_qt.cc +++ b/wstring_qt.cc @@ -10,7 +10,17 @@ namespace gd wstring toWString( QString const & in ) { - return in.toStdU32String(); + QVector< unsigned int > v = in.toUcs4(); + + // Fix for QString instance which contains non-BMP characters + // Qt will created unexpected null characters may confuse btree indexer. + // Related: https://bugreports.qt-project.org/browse/QTBUG-25536 + int n = v.size(); + while ( n > 0 && v[ n - 1 ] == 0 ) n--; + if ( n != v.size() ) + v.resize( n ); + + return wstring( ( const wchar * ) v.constData(), v.size() ); } wstring normalize( const wstring & str )