diff --git a/moto/s3/models.py b/moto/s3/models.py index 8ea305c43..84459b54a 100644 --- a/moto/s3/models.py +++ b/moto/s3/models.py @@ -163,7 +163,7 @@ class FakeKey(BaseModel, ManagedState): def safe_name(self, encoding_type=None): if encoding_type == "url": - return urllib.parse.quote(self.name, safe="") + return urllib.parse.quote(self.name) return self.name @property diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 4d3d63916..12b8dc66c 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -152,6 +152,14 @@ def test_key_name_encoding_in_listing(): key_received = client.list_objects_v2(Bucket="foobar")["Contents"][0]["Key"] key_received.should.equal(name) + name = "example/file.text" + client.put_object(Bucket="foobar", Key=name, Body=b"") + + key_received = client.list_objects( + Bucket="foobar", Prefix="example/", Delimiter="/", MaxKeys=1, EncodingType="url" + )["Contents"][0]["Key"] + key_received.should.equal(name) + @mock_s3 def test_empty_key_set_on_existing_key():