VideoCommon: Fix std::filesystem::path encoding conversion #12112
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In
std::string, you can store strings using any encoding, but in Dolphin we have decided to use UTF-8. The problem is that if you convert betweenstd::stringandstd::filesystem::pathusing the built-in methods, the standard library will make up its own assumption of what encoding you're using in thestd::string. On most OSes this is UTF-8, but on Windows it's whatever the user's code page is.What I believe is the C++ standard authors' intended solution to this is to use
std::u8stringinstead ofstd::string, but that's a big hassle to move over to, because there's no convenient way to convert betweenstd::stringandstd::u8string. Instead, in Dolphin, we have added helper functions that convert betweenstd::stringandstd::filesystem::pathin the manner we want. You always have to use these when converting betweenstd::stringandstd::filesystem::path, otherwise we get these kinds of encoding problems that we've been having with custom textures.Fixes https://bugs.dolphin-emu.org/issues/13328.