### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

```
$ docker run -d -p 4566:4566 localstack/localstack:2.3

$ aws --no-sign-request --endpoint-url=http://localhost:4566 s3 mb s3://tustvold
make_bucket: tustvold
```

If we then create a path with a percent encoded object path, deleting it works correctly
 
```
$ curl -X PUT --data-binary 'test' -H "Content-Type: text/plain" 'http://localhost:4566/tustvold/a%252Fb.txt'

$ aws --no-sign-request --endpoint-url=http://localhost:4566 s3 ls s3://tustvold
2023-10-21 21:33:50          4 a%2Fb.txt

$ aws s3api delete-objects --no-sign-request --endpoint http://localhost:4566 --bucket tustvold --delete 'Objects=[{Key=a%2Fb.txt}]'
{
    "Deleted": [
        {
            "Key": "a%2Fb.txt"
        }
    ]
}
```

However, if the object key is a percent encoded emoji, we get very peculiar behaviour, where the DeleteObject appears to be trying to delete the percent decoded version of the object

```
$ aws --no-sign-request --endpoint-url=http://localhost:4566 s3 ls s3://tustvold
$ curl -X PUT --data-binary 'test' -H "Content-Type: text/plain" 'http://localhost:4566/tustvold/a/%25F0%259F%2598%2580.file'

$ aws --no-sign-request --endpoint-url=http://localhost:4566 s3 ls s3://tustvold --recursive
2023-10-21 21:36:07          4 a/%F0%9F%98%80.file

$ aws s3api delete-objects --no-sign-request --endpoint http://localhost:4566 --bucket tustvold --delete 'Objects=[{Key=a/%F0%9F%98%80.file}]'
{
    "Deleted": [
        {
            "Key": "a/😀.file"
        }
    ]
}
$ aws --no-sign-request --endpoint-url=http://localhost:4566 s3 ls s3://tustvold --recursive
2023-10-21 21:36:07          4 a/%F0%9F%98%80.file
```

### Expected Behavior

In version 2.0 this worked correctly

```
$ docker run -d -p 4566:4566 localstack/localstack:2.0

$ aws --no-sign-request --endpoint-url=http://localhost:4566 s3 mb s3://tustvold

$ curl -X PUT --data-binary 'test' -H "Content-Type: text/plain" 'http://localhost:4566/tustvold/a/%25F0%259F%2598%2580.file'

$ aws s3api delete-objects --no-sign-request --endpoint http://localhost:4566 --bucket tustvold --delete 'Objects=[{Key=a/%F0%9F%98%80.file}]'
{
    "Deleted": [
        {
            "Key": "a/%F0%9F%98%80.file"
        }
    ]
}

$ aws --no-sign-request --endpoint-url=http://localhost:4566 s3 ls s3://tustvold --recursive
```

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

See above

### Environment

```markdown
- OS:
- LocalStack:
```


### Anything else?

_No response_
# this 
            host_no_port = host_443.replace(":443", "")
            response = .get(presign_url, headers={"host": host_no_port})
            assert b"test-value" == response._content
    @markers.aws.validated
    @markers.snapshot.skip_snapshot_verify(
        condition=is_old_provider, paths=["$..VersionId", "$..ContentLanguage", "$..Expires"]
    )
    @markers.snapshot.skip_snapshot_verify(
        condition=lambda: not is_native_provider(),
        paths=["$..ServerSideEncryption"],
    )
    def test_put_(self, s3_bucket, snapshot, aws_client):
        # big 
        #  whe
        snapshot.add_transformer(snapshot.transform.s3_api())
        key = "my-key"
        url = aws_client.s3.generate_presigned_url(
            "put_", Params={"Bucket": s3_bucket, "Key": key}
        )
        .put(url, data="something", verify=False)
        response = aws_client.s3.get_(Bucket=s3_bucket, Key=key)
        assert response["Body"].read() == b"something"
        snapshot.match("get_", response)
    @markers.aws.only_localstack
    @pytest.mark.skipif(
        condition=LEGACY_S3_PROVIDER,
        reason="Legacy S3 provider does not skip the signature validation",
    )
    def test_get_request_expires_ignored_if_validation_disabled(