### Godot version

4.0.3

### System information

Windows 10

### Issue description

When loading files from a `pck` generated by Godot, file paths must match the exact string path that they were packed in.

Usually when loading files using `FileAccess`, redundant `/`s will be handled correctly. For example, `res://my//path////here` will resolve to `res://my/path/here`. This is not true for `pck`s.

---

Assuming the default `icon.svg` file has been moved into a new directory at `res://assets/`

```gdscript
# This is valid
FileAccess.open("res://assets/icon.svg", FileAccess.READ)
# This is also valid
FileAccess.open("res://assets//////icon.svg", FileAccess.READ)
```

When loading from a `pck`, the path must match exactly.

```gdscript
var packer := PCKPacker.new()
packer.pck_start("res://test.pck")
packer.add_file("res://my//path/icon.svg", "res://assets/icon.svg")
packer.flush()

ProjectSettings.load_resource_pack("res://test.pck")

# This is valid
FileAccess.open("res://my//path/icon.svg", FileAccess.READ)

# This is not valid
FileAccess.open("res://my/path/icon.svg", FileAccess.READ)
# This is also not valid
FileAccess.open("res://my//path/////icon.svg", FileAccess.READ)
```

### Steps to reproduce

Create a `pck` file and start adding files.

Load the `pck` and try to access files with redundant `/`s (or with the correct number of `/`s, if the files were added with redundant `/`s).

### Minimal reproduction project

Available as a repo here: https://github.com/you-win/pck-loading-inconsistency

Available as a zip:
[pck_loading_inconsistency.zip](https://github.com/godotengine/godot/files/11525206/pck_loading_inconsistency.zip)

PackedData::PackedFile pf;
	mutable uint64_t pos;
	mutable bool eof;
	uint64_t off;
	Ref<FileAccess> f;
	virtual Error open_internal(const String &p_path, int p_mode_flags) override;
	virtual uint64_t _get_modified_time(const String &p_file) override { return 0; }
	virtual uint32_t _get_unix_permissions(const String &p_file) override { return 0; }
	virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions) override { return FAILED; }
public:
	virtual bool is_open() const override;
	virtual void seek(uint64_t p_position) override;
	virtual void seek_end(int64_t p_position = 0) override;
	virtual uint64_t get_position() const override;
	virtual uint64_t get_length() const override;
	virtual bool eof_reached() const override;
	virtual uint8_t get_8() const override;
	virtual uint64_t get_buffer(uint8_t *p_dst, uint64_t p_length) const override;
	virtual void set_big_endian(bool p_big_endian) override;
	virtual Error get_error() const override;
	virtual void flush() override;
	virtual void store_8(uint8_t p_dest) override;
	virtual void store_buffer(const uint8_t *p_src, uint64_t p_length) override;
	virtual bool file_exists(const String &p_name) override;
	virtual void close() override;
	FileAccessPack(const String &p_path, const PackedData::PackedFile &p_file);
};
Ref<FileAccess> PackedData::try_open_path(const String &p_path) {