2017-01-14 5 views
9

Так что я в настоящее время изучаю C++ 11, и я получаю от этого зависание. Я хочу играть с использованием другого языка, и поскольку я вьетнамский, я хочу создать C++-программу, в которой используются вьетнамские символы.Как отображать вьетнамские символы на C++?

Так как я могу отобразить вьетнамским символов таким же образом, что отображается на английском, который, как это:

cout << "Hello. This is English" << endl; //English 
cout << "Chào. Đây là tiếng Việt." << endl; //Vietnamese 

Я слышал, что C++ имеет <locale>. Помогает ли это сделать вьетнамские персонажи?

+0

Ваш вопрос не говорит, в чем проблема, с которой вы сталкиваетесь ...? – jtbandes

+0

Вам нужно использовать 'wcout' и т. Д. Посмотрите широкие символы/строки –

+0

' #include ',' std :: setlocale (LC_ALL, ""); ',' std :: wcout << L "Chào. Đây là tiếng Việt. ".. .. работает на всех платформах .. но в какой системе вы работаете? Windows может не отображать символы без установленного языкового пакета; этот код отлично работает на одном из моих Linux-боксов с набором локалей, но мой BSD отображает только то, что он может, потому что он не имеет локального установленного. – txtechhelp

ответ

3
#include <iostream> 
#include <io.h> 
#include <fcntl.h> 

int main() { 
    _setmode(_fileno(stdout), _O_U16TEXT); 
    std::wcout << L"Chào. Đây là tiếng Việt."; 
} 

Это решение, которое работает для окон. К сожалению, он не переносится на другие платформы.

+0

Это не работает в моей системе, но, возможно, это проблема полиции. Я не могу отобразить символ: 'ế', он работает для вас? У моего решения такая же проблема. – nikau6

+0

Да, он отображается правильно. Что вы получаете вместо этого? – ScY

+0

Ирония заключается в том, что ваш неуправляемый код также не нужен на большинстве других платформ. Не можете ли вы настроить вывод на UTF8? – dascandy

6

Возможно, у вас возникла проблема с окружающей средой. Вы не говорите, что платформа/окружающая среда вы работаете в, но принять следующую программу:

#include <iostream> 
#include <cstdlib> 

int main() 
{ 
    std::cout << u8"Chào thế giới!" << std::endl; 
    return EXIT_SUCCESS; 
} 

Это дает следующий вывод Iterm на Mac OS X: Chào thế giới!

С другой (не unicode), используя тот же код, вы можете получить символы UTF-8, интерпретируемые как ASCII на выходе. Я не знаю, что даст командная строка Windows, но если вы используете IDE, ваша среда IDE может или не может отображать UTF-8 независимо от того, работает ли ваша оболочка или нет.

Веб-пример.

https://code.sololearn.com/c39N9RN6b4Md/#cpp выходы: Ch├áo thß║┐ giß╗¢i!

Но http://ideone.com/OkkUZs работает точно такие же урожаи кода: Chào thế giới!

Это, вероятно, также стоит отметить, что в C++, чтобы правильно обрабатывать UTF-8 строк, граф "символы", убедитесь, что ваши строки верны UTF-8 и т. д., скорее всего, вы захотите использовать библиотеку Unicode - работа с Unicode нетривиальна.

Лично я нашел и https://github.com/nemtrif/utfcpp, и TinyUTF8, которые я отразил here, чтобы быть отличными библиотеками - достаточно маленькими, простыми и эффективными.

Надеюсь, что это поможет.

+1

Linux (Ubuntu 16.10 попробовал) также имеет консоль UTF8 по умолчанию. – dascandy

+0

Как раз так должно быть, ИМХО. :) Потому что http://utf8everywhere.org. – U007D