Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
#1

Вывести китайский на консоль - C++

24.09.2012, 17:50. Просмотров 1722. Ответов 11
Метки нет (Все метки)

Добрый день!

Подскажите, пожалуйста, как можно вывести китайские или японские иероглифы на консоль?
setlocale(LC_ALL,"ja_JP") не спасает.

Пытаюсь вывести функцией wprintf(L"雌犬");

Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2012, 17:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести китайский на консоль (C++):

Вывести кириллицу в консоль - C++
Как вывести русский текст в консоль, setlocale(LC_ALL, "Russian"); почему-то не работает...

Вывести дерево в консоль - C++
Помогите плиз дерево консольно вывести: #include "stdafx.h" #include <iostream> #include <time.h> using namespace std; ...

Вывести картинку в консоль - C++
Здрасти. Как можно отобразить картинку в консоли? (.bmp .jpeg .tft)

ReadProcessMemory() Вывести кириллицу в консоль - C++
Здравствуйте, я получил значение "0081D1BAD09ED00B" из ячейки памяти с помощью функции ReadProcessMemory(); char name; ...

Вывести числа из потоков в консоль - C++
Есть два отдельных потока, в которых генерируются разные числа. Как вывести эти числа в консоль в разных строках и что бы в консоль не...

Вывести русские символы в консоль - C++
написал программу в Visual Studio 2015. При выводе std::cout<<"привет"; на консоль выводятся какие то непонятные символы вместо слова...

11
Kastaneda
Jesus loves me
Эксперт С++
4688 / 2892 / 236
Регистрация: 12.12.2009
Сообщений: 7,353
Записей в блоге: 2
Завершенные тесты: 1
24.09.2012, 17:53 #2
Думаю нужных шрифтов не хватает. Возможно есть смысл погуглить в эту сторону.

Добавлено через 2 минуты
Цитата Сообщение от antake Посмотреть сообщение
Вывести китайский на консоль
Цитата Сообщение от antake Посмотреть сообщение
setlocale(LC_ALL,"ja_JP")
так все таки китайский или японский?
0
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
24.09.2012, 17:54  [ТС] #3
Вообще неважно, я сначала не заметил.
Задача вывести на консоль любой экзотический язык
0
Kastaneda
Jesus loves me
Эксперт С++
4688 / 2892 / 236
Регистрация: 12.12.2009
Сообщений: 7,353
Записей в блоге: 2
Завершенные тесты: 1
24.09.2012, 17:59 #4
Вот что-то нагуглил, не проверял, т.к. сижу под Linux. Автор кода утверждает, что это японский
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <iostream>
#include <locale>
#include <mbctype.h>
using namespace std;
 
#define SOURCE_IN_CP932
 
// If using VC++, VS 2005 was the first to work with Unicode source code
#if !defined(SOURCE_IN_CP932) && defined(_MSC_VER) && (_MSC_VER < 1400)
#   error "Forget it! Time to upgrade"
#endif
 
#if defined(SOURCE_IN_CP932) && defined(__GNUC__)
#   error "Stick with UTF8 source with MinGW"
#endif
 
int main()
{
    wchar_t wmsg[32];
    size_t len;
 
#ifdef SOURCE_IN_CP932
    const char msg[] = "гЃ“г‚“гЃ«гЃЎгЃЇ\n"; // save source file in CP 932
    cout << "sizeof(msg) = " << sizeof(msg) << endl;
 
    // convert CP 932 -> Unicode (UTF16LE on Windows)
    setlocale(LC_CTYPE, ".932");
    len = mbstowcs(wmsg, msg, sizeof(msg)/sizeof(*msg));
#else
    // source already saved as Unicode, just copy the characters
    wcscpy(wmsg, L"гЃ“г‚“гЃ«гЃЎгЃЇ\n"); // save source file as Unicoode
    len = wcslen(wmsg);
#endif
 
    if (wmsg[0] != 0x3053)
    {
        cerr << "Bad conversion detected, first character not U+3053" << endl;
#ifdef SOURCE_IN_CP932
        cerr << "Source code must be saved under CP 932." << endl;
#else
        cerr << "Source code must be saved using a Unicode encoding." << endl;
#endif
        return 1;
    }//if
 
    DWORD written;
    if (!WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), 
                       wmsg, (DWORD)len,
                       &written, 0))
        cerr << "WriteConsole failed, le = " << GetLastError() << endl;
 
    return 0;
}//main
Добавлено через 1 минуту
хм, на cyberforum почему то иероглифы в коде не отображаются. Вот ссылка откуда взял.

Не по теме:

To moderators:
знаю, что запрещены ссылки на другие форумы, но думаю буржуйские в счет

0
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
24.09.2012, 18:13  [ТС] #5
Спасибо)

Но пока выводит только знаки вопроса, видимо, и правда, шрифтов не хватает. Пытаюсь с этим разобраться.
0
Kastaneda
Jesus loves me
Эксперт С++
4688 / 2892 / 236
Регистрация: 12.12.2009
Сообщений: 7,353
Записей в блоге: 2
Завершенные тесты: 1
24.09.2012, 18:18 #6
Если получится, скинь скрин, интересно
0
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
24.09.2012, 18:26  [ТС] #7
ок. Но вряд ли я это сделаю сегодня, мозги не те(
0
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
24.09.2012, 20:04 #8
Цитата Сообщение от antake
Но пока выводит только знаки вопроса, видимо, и правда, шрифтов не хватает. Пытаюсь с этим разобраться.
Если у вас отображаются шрифты на cyberforum'е, то должны и в консоли. У меня даже такой код работает (опять же под линуксом):
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
using namespace std;
 
int main(int argc, char **argv)
{
    cout << "гЃ“г‚ЊгЃЇж—Ґжњ¬иЄћгЃ§гЃ™гЂ‚" << endl;
    return 0;
}
Это японский. Если выведется японский, то и с китайским не будет проблем (благо японские кандзи - это и есть китайские иероглифы). На прикреплённом скрине видно код без преобразований.

Цитата Сообщение от Kastaneda
Автор кода утверждает, что это японский
Это действительно японский. Если быть точнее, то азбука хирагана. Там написано "здравствуйте". Правда, с ошибкой...

Если поможет, прикрепляю также небольшой проектик для тренировки хираганы и катаканы (с использованием Qt).
0
Миниатюры
Вывести китайский на консоль  
Вложения
Тип файла: zip kana.zip (5.46 Мб, 13 просмотров)
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
24.09.2012, 20:43  [ТС] #9
>Если у вас отображаются шрифты на cyberforum'е, то должны и в консоли. У меня даже такой код работает (опять же под линуксом):

Вот с этим точно не соглашусь!
0
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
25.09.2012, 20:30 #10
antake, может, конечно, в винде и по другому, но мне кажется, что если шрифты в системе установлены, то должны работать универсально (как в графическом, так и в консольном режимах). Скиньте, пожалуйста, скрин. Скорее всего, проблема с кодировками. Дело в том, что под линуксом используется кодировка utf-8. Исходник у меня также был в ней. Следовательно, всё вывелось без проблем. Однако, я не могу перевести этот исходник в cp1251 (стандартная кодировка для кириллицы в windows, насколько помню), так как она просто не поддерживает иероглифы (и хирагану с катаканой заодно). Ваша задача - вывести символы utf-8 из японской/китайской локализации в консоли, а не ставить дополнительные шрифты.

P.S. Приложение kana запустилось и работает? Если не можете скомпилить (это проект для qt creator), то там в какой-то из директорий есть exe'шник (в другой есть исполняемый для линукса) с необходимыми dll.
0
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
26.09.2012, 13:36  [ТС] #11
elvin, не знаю, чем поможет скрин, но выкладываю).

На русском и английском выводит нормально. На 12 строке написано: Name :????.
Знаки вопроса и есть мои иероглифы.

То есть надо сделать так, чтобы вывод на консоли был в utf-8?

Кану запустил)
0
Миниатюры
Вывести китайский на консоль  
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
26.09.2012, 21:32 #12
antake, скрин мне было интересно посмотреть для сравнения. Я поставил на виртуалку винду и теперь экспериментирую. Проблема в том, что я пока что даже русский не могу вывести в консоль. Однако, поэкспериментировал с выводом в файл. Вот исходник:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <QTextStream>
#include <QTextCodec>
#include <QString>
#include <QFile>
 
int main()
{
    QTextStream cout(stdout);
    cout.setCodec("UTF-8");
    QFile file("jpn.txt");
    file.open(QIODevice::WriteOnly);
    QTextStream out(&file);
    QString nihon = QString::fromUtf8("гЃ“г‚ЊгЃЇж—Ґжњ¬иЄћгЃ§гЃ™гЂ‚");
    out << nihon;
    cout << nihon << endl;
    return 0;
}
Так вот, если значение объекта nihon заменить на кириллические символы, то в консоль выводится кроказябра, в то время как в файл jpn.txt всё записывается нормально. Однако, в данном случае (значение nihon на японском) и в консоль, и в файл выводятся знаки вопроса. То есть проблема всё-таки с кодировками, а не шрифтами.
0
26.09.2012, 21:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2012, 21:32
Привет! Вот еще темы с ответами:

Ввести и вывести текст на консоль - C++
Нужно простая работа с текстом нужно ввести текст(с пробелами т.е. cin - неподойдет) и вывести введенный текст также с пробелами со всем....

Совершенные числа (вывести в консоль) - C++
Надо вывести все совершенные числа до миллиона в консоль. Желательно попроще (циклами for или while). Не могу составить алгоритм ! Заранее...

Вывести в консоль бабочку из звездочек - C++
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...

Вывести данные класса в консоль - C++
#include &lt;iostream&gt; using namespace std; class Student { protected: char name; char fam; int year; }; class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru