Язык UTF-8 в Visual C ++ 2010 - PullRequest
       1

Язык UTF-8 в Visual C ++ 2010

5 голосов
/ 02 марта 2012

Я пытаюсь прочитать текстовый файл UTF-8 в Visual C ++ 2010, используя только стандартную библиотеку, а не API-интерфейсы Boost или Windows.Я определяю локаль как:

std::locale utf8_locale(std::locale(), new std::codecvt_utf8<wchar_t>);

, но это приводит к следующей ошибке компилятора:

error C2661: 'std::locale::facet::operator new' : no overloaded function takes 3 arguments
error C2664: 'std::locale::locale(const char *,std::locale::category)' : cannot convert parameter 1 from 'std::locale' to 'const char *'

Ответы [ 2 ]

5 голосов
/ 03 марта 2012

Ошибка возникает в режиме отладки, когда код используется в файле, который помещается в приведенный ниже макрос micrsoft Visual c ++.

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Чтобы избавиться от этой ошибки, следует прокомментировать #define new DEBUG_NEWили код должен быть реализован в другом файле, который не имеет вышеуказанного макроса.Эта ошибка для Visual C ++ 2010 упоминается здесь http://connect.microsoft.com/VisualStudio/feedback/details/683483/mfc-c-fails-to-compile-use-of-codecvt-utf8-in-debug-configuration

3 голосов
/ 24 декабря 2012

К вашему сведению, другой способ - просто написать

std::locale utf8(std::locale(), ::new std::codecvt_utf8<wchar_t>);

Это заставит компилятор использовать глобальный новый вместо локали нового

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...