Ejemplo:

#include <iostream>

using namespace std;

int main()
{
    wchar_t en[] = L"Hello";
    wchar_t ru[] = L"Привет"; //Russian language
    cout << ru
         << endl
         << en;
    return 0;
}

Este código imprime sólo HEX-valores como la dirección.
Cómo imprimir el wchar_t cadena?

  • La primera pregunta Relacionada con la es stackoverflow.com/questions/1625531/…
  • En qué OS, y utilizando lo que en aplicación de consola? Algunas consolas no compatibles con Unicode.
  • Windows 7. Compilador MSVS2008
  • Gracias. Yo estaba escribiendo una VC++ aplicación de consola que se imprimió de nuevo los argumentos del comando y el resultado me hizo temblar.
InformationsquelleAutor zed91 | 2010-03-22

7 Comentarios

  1. 79

    Edit: Esto no funciona si usted está tratando de escribir un texto que no puede ser representado en su configuración regional predeterminada. 🙁

    Uso std::wcout en lugar de std::cout.

    wcout << ru << endl << en;
    • Se imprime sólo la cadena en inglés. ¿Qué acerca de los rusos?
    • La consola no va a ser habilitada para Unicode. Redirección de la salida es la tara, que se queda en 8-bit char legado. Sólo puede salida correcta del texto en una máquina rusa con la consola correcta de la fuente cargada.
    • Tenga en cuenta que si usted intenta esto para imprimir en una consola de Linux que son propensos a terminar con caracteres ilegibles como la mayoría de los sistemas Linux no utiliza el utf16 de codificación.
    • chcp 1252 resuelto el problema, para mí.
  2. 13

    Puedo sugerir std::wcout ?

    Así, algo como esto:

    std::cout << "ASCII and ANSI" << std::endl;
    std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl;

    Usted puede encontrar más información en una pregunta relacionada con la aquí.

  3. 0

    Usted podría utilizar el uso normal de una matriz de char que realmente está lleno de caracteres utf-8. Esto debería permitir que la mezcla de los caracteres de todos los idiomas.

  4. 0
    #include <iostream>
    using namespace std;
    void main()
    {
    setlocale(LC_ALL, "Russian");
    cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
    }
    • Usted podría mejorar esta respuesta mediante el suministro de una explicación para ir con su código.
    • Bienvenido a Desbordamiento de Pila! Aunque este código puede ayudar a resolver el problema, no explica porque y/o como contesta a la pregunta. La prestación de este contexto adicional podría mejorar significativamente su valor de largo plazo. Por favor, editar su respuesta a agregar explicación, incluyendo lo que las limitaciones y supuestos que se aplican.
  5. 0

    Windows tiene la muy confusa la información. Usted debe aprender C/C++ concepto de Unix/Linux antes de programación en Windows.

    wchar_t tiendas de caracteres en UTF-16, que es un fijo de 16 bits tamaño de la memoria del llamado gran personaje pero wprintf() o wcout() nunca va a imprimir no-inglés caracteres anchos correctamente porque no hay consola de salida será en UTF-16. Windows va de salida en la configuración regional actual, mientras que en unix/linux la salida en UTF-8, todos son multi-byte. Así que usted tiene que convertir distintos caracteres multi-byte antes de la impresión. El comando unix wcstombs() no funciona en Windows, use WideCharToMultiByte() en su lugar.

    Primer lugar usted necesita para convertir el archivo en UTF-8 con el bloc de notas o cualquier otro editor. A continuación, instale la fuente en la línea de comandos de la consola para que pueda leer/escribir en su idioma y cambiar la página de código en la consola a UTF-8 para mostrar correctamente escribiendo en el símbolo del sistema «chcp 65001», mientras que cygwin ya está predeterminado a UTF-8. Aquí es lo que yo hice en Tailandés.

    #include <windows.h>
    #include <stdio.h>
    
    int main()
    {
        wchar_t* in=L"ทดสอบ"; //thai language
        char* out=(char *)malloc(15);
        WideCharToMultiByte(874, 0, in, 15, out, 15, NULL, NULL);
        printf(out); //result is correctly in Thai although not neat
    }

    Nota que
    874=(Tailandés) de la página de código en el sistema operativo, 15=tamaño de la cadena de

    Mi sugerencia es evitar la impresión de que no-inglés caracteres anchos a la consola a menos que sea necesario, porque no es fácil.

  6. 0

    Puede imprimir caracteres anchos con wprintf.

    #include <iostream>
    
    int main()
    {
        wchar_t en[] = L"Hello";
        wchar_t ru[] = L"Привет"; //Russian language
        wprintf(en);
        wprintf(ru);
        return 0;
    }

    De salida:

    Hola

    Привет

  7. -4

    no estamos buscando maneras fáciles!

    int i = 0;
    while (ru[i]) {
       std::cout << (char)ru[i];
       i++;
    }
    • Se puede explicar más que eso?
    • Si esto funciona, no habría razón para caracteres anchos…

Dejar respuesta

Please enter your comment!
Please enter your name here