PDA

Просмотр полной версии : кодировка.


destructor
29.10.2009, 21:14
дано:
wchar_t * s = {0x410, 0x410, 0x410, 0x410 0x410, 0x410, 0x0,};
void main()
{
wprintf(s);
};

найти:
как заставить виндовую консоль говорить на языке UTF8?


знаю как перегнать строчку другой формат, но это не Труъ,
поэтому такой вариант не рассматриваем.

xkor
29.10.2009, 21:34
запускаем cmd.exe, ставим через свойства шрифт TrueType, и командой chcp 65001 устанавливаем utf-8
после этого можно вызывать проги выводящие на консоль utf-8

ЗЫ но мне кажется что у тя код выводит utf-16

destructor
29.10.2009, 21:39
ЗЫ но мне кажется что у тя код выводит utf-16ну текст в пакетах л2 в чем?

xkor
29.10.2009, 21:51
о, а ещё есть такая функция - SetConsoleOutputCP
и можно прям в своей проге указать кодировку - SetConsoleOutputCP(65001);

Добавлено через 1 минуту
destructor, в пакетах линейки в юникоде (utf-16), как его на консоль выдернуть я хз так что приждётся сначала в utf-8 переводить, благо это не проблема)

destructor
29.10.2009, 22:31
мсдн пишет:
1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications

щас попробую: SetConsoleOutputCP(1200);

Добавлено через 29 минут
available only to managed applicationsплять, пойду убьюсь

//alexteam: пашли, я местечко хорошее знаю, покруче чем будка самоубийств.

опоздал, купил 3 банки пива и таки осилил себя забылокодить конвертор,
снова хочется жить, так что в другой раз

GoldFinch
30.10.2009, 00:14
в чем проблема? в линейке строки все UTF-16, обычный юникод.
в С\С++ это wchar_t*, std::wstring
выводится через std::wcout

destructor
30.10.2009, 00:18
GoldFinch, да кракозяблы она вместо руского выводит

GoldFinch
30.10.2009, 00:25
#include <iostream>
#include <locale>

int main()
{
setlocale(LC_ALL,"Russian");

wchar_t s[] = {0x0410, 0x0411, 0x042b, 0x0420, 0x0412, 0x0410, 0x0413, 0};
std::wcout << s << std::endl;
}
& #91; это [

PS: "Russian" - это под виндой. под никсами другая строка, есле что

destructor
30.10.2009, 00:38
wprintf
вместо
std::wcout
должен катить

Добавлено через 36 секунд
но и твои лыжи тоже не поехали

GoldFinch
30.10.2009, 00:57
destructor, чини ОС, с ней явно что-то не то.

destructor
30.10.2009, 01:16
ппц std::wcout суко работает!
значит printf в топку? значит менять религию?

-----------
через printf возможно вывести?

GoldFinch
30.10.2009, 01:18
int main()
{
setlocale(LC_ALL,"Russian");

wchar_t s[] = {0x0410, 0x0411, 0x042b, 0x0420, 0x0412, 0x0410, 0x0413, 0};
wprintf(L"%s\n",s);
//std::wcout << s << std::endl;
}
у меня и это работает %)

destructor
30.10.2009, 01:39
вопрос временно снят, до выяснения обстоятельств

destructor
17.11.2009, 00:05
все примеры от GoldFinch у меня работают нормально.

пытаюсь из длл показать консоль:
AllocConsole();
freopen("conin$", "r", stdin); //console input buffer
freopen("conout$", "w", stdout);//console output buffer
freopen("conout$", "w", stderr); //console error device

setlocale(LC_ALL,"Russian");
и wprintf начинает выдавать кракозяблы, подозреваю, что я что то делаю не так.

как правильно отрыть консоль из длл?