Pergunta

Em um projeto Xcode, se eu usar std::cout Para escrever no console, a saída é boa.

No entanto, se eu usar std::wcout Não recebo saída.

Sei que este é um problema espinhoso no C ++, e estou pesquisando no Google para tentar encontrar uma solução específica no caso Xcode. Algumas coisas que descobri que foram sugeridas que funcionassem foram:


    std::cout.imbue( std::locale("") );

e


    std::setlocale(LC_ALL, "");

Nenhum deles fez nenhuma diferença. Antes de me resignar a passar as próximas semanas estudando a API de facetas apenas para poder escrever no console, pensei em verificar com a estimada audiência aqui.

Atualizar

Eu acho que o motivo do problema que tenho tido é realmente a ver com a codificação específica de algumas das cordas que estou tentando imprimir.

Se eu enviar apenas uma string literal, usando o L"my string" syntax funciona! Parece que isso está usando UTF32 - Little Endian Encoding.

No entanto, eu tenho misturado isso com strings que passei do código C ++ objetivo usando a codificação NSUTF32BigEndiaStringEncoding. É essa mistura de codificações que está causando os problemas.

Acho que podemos considerar esse assunto fechado. Obrigado pela leitura.

Foi útil?

Solução

std :: wcout deve funcionar exatamente como std :: cout.

O seguinte funciona bem no meu Mac:

#include <iostream>

int main()
{
    std::cout << "HI" << std::endl;
    std::wcout << L"PLOP" << std::endl;
}

Talvez (embora algum código tenha sido bom) é porque você não está descarregando o buffer. Lembre -se de que std :: cout e std :: wcout são buffers. Isso significa que a saída não será empurrada para o console até que o buffer seja preenchido ou você lavar explicitamente o buffer.

Você pode liberar o buffer com:

std::wcout << flush();
// or
std::wcout << endl;  // Those also puts a '\n' on the stream.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top