Нет - объектный подход - это ответ JavaScript на это. Нет проблем с этим, если ваша функция ожидает объект, а не отдельные параметры.
Первое, что нужно сделать, это определить, находится ли ваш ввод в Юникоде. Для этого необходимо прочесть введенные данные в формате ЮНИКОД и проверить, искажены ли результаты.
FILE * fp = _wfopen( L"fname",L"r" );
wchar_t buf[1000];
while( fgetws(buf,999, fp ) ) {
fwprintf(L"%s",buf);
}
Если вывод - OK, у вас есть UNICODE-файл, если он искажен - UTF-8
Если у вас есть UTF-8, вам придется преобразовать в Юникод, чтобы сделать обработку простой.
// convert UTF-8 to UNICODE
void String2WString( std::wstring& ws, const std::string& s )
{
ws.clear();
int nLenOfWideCharStr = MultiByteToWideChar(CP_ACP, 0,
s.c_str(), s.length(), NULL, 0);
PWSTR pWideCharStr = (PWSTR)HeapAlloc(GetProcessHeap(), 0,
nLenOfWideCharStr * sizeof(wchar_t)+2);
if (pWideCharStr == NULL)
return;
MultiByteToWideChar(CP_ACP, 0,
s.c_str(), s.length(),
pWideCharStr, nLenOfWideCharStr);
*(pWideCharStr+nLenOfWideCharStr ) = L'\0';
ws = pWideCharStr ;
HeapFree(GetProcessHeap(), 0, pWideCharStr);
}
// read UTF-8
FILE * fp = fopen( "fname","r" );
char buf[1000];
std::string aline;
std::wstring wline;
std::vector< std::wstring> vline;
while( fgets(buf,999, fp ) ) {
aline = buf;
String2WString( wline, aline );
vline.push_back( wline );
}
Выше предполагается, что вы находитесь в Windows. В Unix применяется та же идея и код довольно похож. Однако я не нахожу его столь простым, поэтому позволю эксперту UNIX предоставить детали.
-121--3791884-Нет, это не военное преступление иметь код третьей стороны в вашем хранилище, но я считаю, что это расстроило мое чувство эстетики. Многие люди здесь, кажется, придерживаются мнения, что хорошо иметь всю вашу команду развития на одной версии этих зависимостей; Я говорю, что это ответственность. В конечном итоге вы зависите от определенной версии этой зависимости, где гораздо сложнее использовать другую версию позже. Я предпочитаю гетерогенную среду разработки - она заставляет вас отделить свой код от конкретных версий зависимостей.
IMHO - подходящее место для сохранения зависимостей - это резервные копии на ленточных накопителях и депозитные депозиты, если они имеются. Если этого требует конкретный проект (и проекты в этом отношении не совпадают), то также сохраните документ в системе управления версиями, который связан с этими конкретными версиями.
-121--1326610-Поскольку большое количество устаревших кодов записывается с расчетом на то, что «отрицательные» указатели недопустимы. Любой элемент в двух верхних Гб 32-битного процесса имеет набор msb.
Поэтому для Microsoft гораздо проще играть в безопасности и требовать приложения, которые (а) нуждаются в полной 4Gb и (б) были разработаны и протестированы в сценарии большой памяти, чтобы просто установить флаг.
Это не так трудно, как вы заметили.
Рэймонд Чен - в своем блоге The Old New Thing - освещает проблемы с включением его для всех (32-битных) приложений.