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::string
andstd::filesystem::path
using 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::u8string
instead ofstd::string
, but that's a big hassle to move over to, because there's no convenient way to convert betweenstd::string
andstd::u8string
. Instead, in Dolphin, we have added helper functions that convert betweenstd::string
andstd::filesystem::path
in the manner we want. You always have to use these when converting betweenstd::string
andstd::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.