Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[delimitedtext] Fix regression opening files with unicode characters
(fixes #41948)
  • Loading branch information
nirvn authored and github-actions[bot] committed Mar 4, 2021
1 parent 00390a4 commit 0978907
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
Expand Up @@ -1262,7 +1262,7 @@ QString QgsDelimitedTextProvider::description() const

QVariantMap QgsDelimitedTextProviderMetadata::decodeUri( const QString &uri ) const
{
const QUrl url( uri );
const QUrl url = QUrl::fromEncoded( uri.toLatin1() );
const QUrlQuery queryItems( url.query() );

QString subset;
Expand Down Expand Up @@ -1309,7 +1309,7 @@ QString QgsDelimitedTextProviderMetadata::encodeUri( const QVariantMap &parts )
queryItems.addQueryItem( QStringLiteral( "subset" ), parts.value( QStringLiteral( "subset" ) ).toString() );
url.setQuery( queryItems );

return url.toString();
return QString::fromLatin1( url.toEncoded() );
}

QgsDataProvider *QgsDelimitedTextProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags )
Expand Down
13 changes: 11 additions & 2 deletions tests/src/python/test_qgsdelimitedtextprovider.py
Expand Up @@ -951,14 +951,23 @@ def testSpatialIndex(self):
vl.dataProvider().createSpatialIndex()
self.assertEqual(vl.hasSpatialIndex(), QgsFeatureSource.SpatialIndexPresent)

def testEncodeuri(self):
def testEncodeDecodeUri(self):
registry = QgsProviderRegistry.instance()

# URI decoding
filename = '/home/to/path/test.csv'
registry = QgsProviderRegistry.instance()
parts = {'path': filename}
uri = registry.encodeUri('delimitedtext', parts)
self.assertEqual(uri, 'file://' + filename)

# URI encoding / decoding with unicode characters
filename = '/höme/to/path/pöints.txt'
parts = {'path': filename}
uri = registry.encodeUri('delimitedtext', parts)
self.assertEqual(uri, 'file:///h%C3%B6me/to/path/p%C3%B6ints.txt')
parts = registry.decodeUri('delimitedtext', uri)
self.assertEqual(parts['path'], filename)

def testCREndOfLineAndWorkingBuffer(self):
# Test CSV file with \r (CR) endings
# Test also that the logic to refill the buffer works properly
Expand Down

0 comments on commit 0978907

Please sign in to comment.