Skip to content

Commit 3dea491

Browse files
author
Hugo Mercier
committed
Fix text encoding in request filter expression
1 parent 83c57ef commit 3dea491

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

src/providers/ogr/qgsogrfeatureiterator.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrFeatureSource* source, bool
9494
if ( result == QgsSqlExpressionCompiler::Complete || result == QgsSqlExpressionCompiler::Partial )
9595
{
9696
QString whereClause = compiler.result();
97-
if ( OGR_L_SetAttributeFilter( ogrLayer, whereClause.toLocal8Bit().data() ) == OGRERR_NONE )
97+
if ( OGR_L_SetAttributeFilter( ogrLayer, mSource->mEncoding->fromUnicode( whereClause ).constData() ) == OGRERR_NONE )
9898
{
9999
//if only partial success when compiling expression, we need to double-check results using QGIS' expressions
100100
mExpressionCompiled = ( result == QgsSqlExpressionCompiler::Complete );

tests/src/python/test_qgsfeatureiterator.py

+16
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,22 @@ def test_FilterExpression(self):
5757
myMessage = '\nExpected: {0} features\nGot: {1} features'.format(repr(expectedIds), repr(ids))
5858
assert ids == expectedIds, myMessage
5959

60+
def test_FilterExpressionWithAccents(self):
61+
myShpFile = os.path.join(TEST_DATA_DIR, 'france_parts.shp')
62+
layer = QgsVectorLayer(myShpFile, 'poly', 'ogr')
63+
64+
layer.setProviderEncoding("ISO-8859-1")
65+
ids = [feat.id() for feat in layer.getFeatures(QgsFeatureRequest().setFilterExpression(u"TYPE_1 = 'Région'"))]
66+
expectedIds = [0, 1, 2, 3]
67+
myMessage = '\nExpected: {0} features\nGot: {1} features'.format(repr(expectedIds), repr(ids))
68+
assert ids == expectedIds, myMessage
69+
70+
layer.setProviderEncoding("UTF-8")
71+
ids = [feat.id() for feat in layer.getFeatures(QgsFeatureRequest().setFilterExpression(u"TYPE_1 = 'Région'"))]
72+
expectedIds = []
73+
myMessage = '\nExpected: {0} features\nGot: {1} features'.format(repr(expectedIds), repr(ids))
74+
assert ids == expectedIds, myMessage
75+
6076
def test_FilterFids(self):
6177
# create point layer
6278
myShpFile = os.path.join(TEST_DATA_DIR, 'points.shp')

tests/testdata/france_parts.dbf

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)