### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

First, I upload a file that includes spaces in its filename.

Then, when I try to copy that file, I get a 404 error, and the file is not copied.

```
2024/01/04 21:31:18 error s3client copy object: operation error S3: CopyObject, https response error StatusCode: 404, RequestID: 81bbb363-4bf9-49ac-ac4e-fe4918a9a09c, HostID: s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=, api error NoSuchKey: The specified key does not exist.
Exiting.
```

### Expected Behavior

The file should be copied successfully.

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

```docker-compose.yml
version: '3.9'
services:
  localstack:
    build:
      context: localstack
      dockerfile: Dockerfile
    environment:
      - AWS_DEFAULT_REGION=ap-northeast-1
      - AWS_DEFAULT_OUTPUT=json
      - AWS_ACCESS_KEY_ID=dummy
      - AWS_SECRET_ACCESS_KEY=dummy
      - LOCALSTACK_SERVICES=s3,ses
      - LS_LOG=debug
      - DEBUG=1
    ports:
      - "4566:4566"
```

```Dockerfile
FROM localstack/localstack:latest

COPY ready.d /etc/localstack/init/ready.d
```

Here is the complete code:

git clone https://github.com/yuki2006/localstack_check
go run main.go

### Environment

```markdown
- OS: docker image localstack/localstack
- LocalStack:latest
```


### Anything else?

This is the implementation following the example provided here:
https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/example_code/s3/s3_copy_object.go#L65C36-L65C47

(https://github.com/yuki2006/localstack_check/blob/master/main.go#L79)

Additionally, this issue does not occur with the actual S3; no errors were encountered.
"""
    This method returns the S3 Owner from the account id. for now, this is hardcoded as it was in moto, but we can then
    extend it to return different values depending on the account ID
    See https://docs.aws.amazon.com/AmazonS3/latest/API/API_Owner.html
    :param account_id: the owner account id
    :return: the Owner object containing the DisplayName and owner ID
    """
    return Owner(
        DisplayName="webfile",  
        ID="75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a",
    )
def extract_bucket_key_version_id_from_copy_source(
    copy_source: CopySource,
) -> tuple[BucketName, ObjectKey, Optional[ObjectVersionId]]:
    """
    Utility to parse bucket name, object key and optionally its versionId. It accepts the CopySource format:
    - <bucket-name/<object-key>?versionId=<version-id>, used for example in CopySource for CopyObject
    :param copy_source: the S3 CopySource to parse
    :return: parsed BucketName, ObjectKey and optionally VersionId
    """
    copy_source_parsed = urlparser.urlparse(copy_source)
    src_bucket, src_key = urlparser.unquote(copy_source_parsed.path).lstrip("/").split("/", 1)
    src_version_id = urlparser.parse_qs(copy_source_parsed.query).get("versionId", [None])[0]
    return src_bucket, src_key, src_version_id
class ChecksumHash(Protocol):