### Godot version

4.2 stable

### System information

Godot v4.2.stable - Windows 10.0.19045 - GLES3 (Compatibility) - AMD Radeon(TM) Graphics (Advanced Micro Devices, Inc.; 30.0.13014.10001) - AMD Ryzen 5 5500U with Radeon Graphics (12 Threads)

### Issue description

version : Godot 4.2

When debugging the code, when using ZIPPacker to create a compressed package, I couldn't successfully write any non-ASCII characters as the file name, he would sometimes output garbled characters, and sometimes he wouldn't even write the file properly.
And most of the time, he just outputs garbled characters, and it is incorrect to check the compressed file name in the Windows compression manager interface.
However, the same file can be read with the same name in the code.
There are times when I use ZIPReader to unzip a file named with non-ASCII characters, I also get an error:
```
Unicode parsing error, some characters were replaced with � (U+FFFD): Invalid UTF-8 leading byte (b2)
`Unicode parsing error, some characters were replaced with � (U+FFFD): Invalid UTF-8 continuation byte (e3 ... c2 ...)`
```


### Steps to reproduce

code:
```
var path: String = "res://test.zip";
func _ready():
	var writer = ZIPPacker.new();
	var err = writer.open(path);
	if (err != OK) :
		print("ERROR!");
	writer.start_file("你好Godot.txt");
	writer.write_file("Hello World!".to_utf8_buffer());
	writer.close_file();
	# ...
	writer.close();
```

After running, the file name becomes garbled characters: "浣犲ソGodot.txt";
The ASCLL section is not affected


### Minimal reproduction project

[Test.zip](https://github.com/godotengine/godot/files/13536959/Test.zip)

for (const PropertyInfo &pi : props) {
			if (!pi.name.begins_with("autoload/")) {
				continue;
			}
			String autoload_path = GLOBAL_GET(pi.name);
			if (autoload_path.begins_with("*")) {
				autoload_path = autoload_path.substr(1);
			}
			_export_find_dependencies(autoload_path, paths);
		}
	}
	
	_edit_filter_list(paths, String("*.icns"), false);
	_edit_filter_list(paths, String("*.ico"), false);
	_edit_filter_list(paths, p_preset->get_include_filter(), false);
	_edit_filter_list(paths, p_preset->get_exclude_filter(), true);
	
	_edit_filter_list(paths, String("*.import"), true);
	
	bool enc_pck = p_preset->get_enc_pck();
	Vector<String> enc_in_filters;
	Vector<String> enc_ex_filters;
	Vector<uint8_t> key;
	if (enc_pck) {
		Vector<String> enc_in_split = p_preset->get_enc_in_filter().split(",");
		for (int i = 0; i < enc_in_split.size(); i++) {
			String f = enc_in_split[i].strip_edges();
			if (f.is_empty()) {
				continue;
			}