Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2012, 17:50     Вывести китайский на консоль
Посмотрите здесь:

C++ ReadProcessMemory() Вывести кириллицу в консоль
C++ Совершенные числа (вывести в консоль)
C++ Как вывести цифры на консоль ?
Как быстро вывести в консоль C++
Вывести в консоль русский текст C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.09.2012, 17:53     Вывести китайский на консоль #2
Думаю нужных шрифтов не хватает. Возможно есть смысл погуглить в эту сторону.

Добавлено через 2 минуты
Цитата Сообщение от antake Посмотреть сообщение
Вывести китайский на консоль
Цитата Сообщение от antake Посмотреть сообщение
setlocale(LC_ALL,"ja_JP")
так все таки китайский или японский?
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
24.09.2012, 17:54  [ТС]     Вывести китайский на консоль #3
Вообще неважно, я сначала не заметил.
Задача вывести на консоль любой экзотический язык
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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:
знаю, что запрещены ссылки на другие форумы, но думаю буржуйские в счет

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

Но пока выводит только знаки вопроса, видимо, и правда, шрифтов не хватает. Пытаюсь с этим разобраться.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.09.2012, 18:18     Вывести китайский на консоль #6
Если получится, скинь скрин, интересно
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
24.09.2012, 18:26  [ТС]     Вывести китайский на консоль #7
ок. Но вряд ли я это сделаю сегодня, мозги не те(
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).
Миниатюры
Вывести китайский на консоль  
Вложения
Тип файла: zip kana.zip (5.46 Мб, 11 просмотров)
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
24.09.2012, 20:43  [ТС]     Вывести китайский на консоль #9
>Если у вас отображаются шрифты на cyberforum'е, то должны и в консоли. У меня даже такой код работает (опять же под линуксом):

Вот с этим точно не соглашусь!
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.
antake
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 29
26.09.2012, 13:36  [ТС]     Вывести китайский на консоль #11
elvin, не знаю, чем поможет скрин, но выкладываю).

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

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

Кану запустил)
Миниатюры
Вывести китайский на консоль  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2012, 21:32     Вывести китайский на консоль
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
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 на японском) и в консоль, и в файл выводятся знаки вопроса. То есть проблема всё-таки с кодировками, а не шрифтами.
Yandex
Объявления
26.09.2012, 21:32     Вывести китайский на консоль
Ответ Создать тему
Опции темы

Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru