Загрузите двухбайтовый путь строки в TinyXML2

Я использую TinyXML2 для загрузки XML-документа с диска.

Путь к файлу (configFileName) представляет собой wstring и я конвертирую его в строку так:

    tinyxml2::XMLDocument doc;
std::string fileName(configFileName.begin(), configFileName.end());
doc.LoadFile(fileName.c_str());

Это работает, но могут быть случаи, когда моя программа работает на двухбайтовой ОС, такой как китайская или корейская версия, и преобразование из wstring в строку выше приведет к потере символов.

Как я могу загрузить путь, такой как следующий:

wstring wPathChinese = L"C:\\我明天要去上海\\在这里等我\\MyProgram";

РЕДАКТИРОВАТЬ

Я попробовал следующее, чтобы преобразовать строку, но она по-прежнему портит китайские символы:

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);

1

Решение

Я предлагаю вам использовать

XMLError tinyxml2::XMLDocument::LoadFile( FILE *)

Так что вы можете просто сделать что-то вроде этого:

FILE* fp = nullptr;
errno_t err = _wfopen_s(&fp, configFileName.c_str(), L"rb" );
if( fp && !err )
{
tinyxml2::XMLDocument doc;
doc.LoadFile( fp );
fclose( fp );
}

И забудьте сделать кошмарное преобразование между строкой и строкой …

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector