Я использую TinyXML2 для загрузки XML-документа с диска.Загрузите строку с двумя байтами в TinyXML2
Путь к файлу (configFileName) является wstring и я преобразуя его в строку следующим образом:
tinyxml2::XMLDocument doc;
std::string fileName(configFileName.begin(), configFileName.end());
doc.LoadFile(fileName.c_str());
Это работает, но бывают случаи, когда моя программа работает на двойной байт OS таких как китайский или корейский, и преобразование из wstring в строку выше потеряет персонажей.
Как я могу загрузить путь, такие как следующие:
wstring wPathChinese = L"C:\\我明天要去上海\\在这里等我\\MyProgram";
EDIT
Я попытался следующие, чтобы преобразовать строку, но она по-прежнему портит китайские иероглифы:
std::string ConvertWideStringToString(std::wstring source)
{
//Represents a locale facet that converts between wide characters encoded as UCS-2 or UCS-4, and a byte stream encoded as UTF-8.
typedef std::codecvt_utf8<wchar_t> convert_type;
// wide to UTF-8
std::wstring_convert<convert_type, wchar_t> converter;
std::string converted_str = converter.to_bytes(source);
return converted_str;
}
string pathCh2 = ConvertWideStringToString(wPathChinese);
Смотрите мой выбор за то, что я пытался. Благодарю. –
Может ли 'std :: string' удерживать эти символы? – TobiMcNamobi
Теперь, когда вы упоминаете, что нет, я так не думаю. Doc.LoadFile принимает в качестве параметра параметр "const char * filename". Поэтому мне нужно найти способ разрешить загрузке строки с этими символами, если это возможно. –