Как прочитать ввод пользователя из консоли в строку Unicode? - PullRequest
4 голосов
/ 12 июля 2010

Вопрос новичка в C ++. Вот что у меня сейчас:

// From tchar.h
#define _T(x)       __T(x)

...

// From tchar.h
#define __T(x)      L ## x

...

// In MySampleCode.h
#ifdef _UNICODE
    #define tcout wcout
#else
    #define tcout cout
#endif

...

// In MySampleCode.cpp
CAtlString strFileName;
if (bIsInteractiveMode)
{
char* cFileName = new char[513];
tcout << endl;
tcout << _T("Enter the path to a file that you would like to XYZ(purpose obfuscated) ") << endl;
tcout << _T(">>> ");            
cin.getline(cFileName, 512);
strFileName = cXmlFileName;
}

// Demonstrates how CAtlString can be printed using `tcout`.
tcout << _T("File named '") << strFileName.GetString() << _T("' does not exist.") << endl;

В США это "работает", но я понятия не имею, что произойдет, если ... скажем, французский пользователь запускает это приложение и начинает вводить странные символы, такие как Çanemeplaîtpas.xml, в командной строке. Я ищу чистый способ заполнения строки типа CAtlString. Максимальная длина ввода всегда может быть установлена ​​достаточно длинной, но в идеале я хотел бы ограничить ввод Unicode и не-Unicode одинаковым количеством символов. Надеюсь, что это достаточно просто и элегантно.

1 Ответ

4 голосов
/ 24 июля 2010

Разве вы не должны использовать wcin stream, если ожидаете ввода в Unicode?

#include <iostream>
#include <string>
#include <locale>

int main()
{
    using namespace std;

    std::locale::global(locale("en_US.utf8"));

    std::wstring s;

    std::wcin >> s;

    std::wcout << s;

}

...