[freebsd C] кодировка вывода

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

[freebsd C] кодировка вывода

Непрочитанное сообщение Gloft » 2011-05-29 11:49:10

Простеникий пример:

Код: Выделить всё

#include <stdio.h>
#include <wchar.h>

int main(){
	wprintf(L"Привет!\n");
	return 0;
}
Компилирую и запускаю:

Код: Выделить всё

%cc -o test test.c
%./test
%
Ничего не выводит.
Исходный файл программы сохранен в кодировке utf8, локаль консоли koi8-r.
Как правильно работать с русским текстом для корректного его отображения на консоле.
С учетом того что она может быть собрана и запущена на другой машине с другими параметрами окружения.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Gloft » 2011-05-29 13:06:55

Искал и читал обе ссылки.
Так как описано по ссылкам не работает.

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Bayerische » 2011-05-29 15:56:06

Под Windows c данным гемороем тоже сталкивался

Код: Выделить всё

#include <iostream>
using namespace std;
int main()
{
    system("chcp 1251 > nul");
    cout << "привет" << endl;
    return 0;
}
Типа, так. Или так:

Код: Выделить всё

#include <iostream>
using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "привет" << endl;
    return 0;
}

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Gloft » 2011-05-30 7:47:45

Приведенный пример это C++, меня интересует C и под freebsd.


Dambo
ефрейтор
Сообщения: 61
Зарегистрирован: 2009-11-27 22:29:58

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Dambo » 2011-05-30 15:49:03

Кстати 2 ссылка, что гость вам кинул там как раз FreeBSD рассматривают и gcc компилятор, вы её точно изучили и ни чего не получается?

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Gloft » 2011-05-31 19:39:01

Во второй ссылке описан процесс компиляции.
Но ничего не написано о случае когда на одной и тойже машине могут с ПО работать несколько человек с разной кодировкой.
Это разовое решение, мне же интересно как сделать универсальный вариант.
Может я плохо понял описанное в статье? Поправте если я ошибаюсь.

Гость
проходил мимо

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Гость » 2011-05-31 19:50:19

с какой это разной кодировкой?
суть проблемы разложите
может и нет этой проблемы то?

вы хотите что бы один человек сидел в koi8-r кодировки файл правил
второй в utf8
третий в cp1251
и у всех было правильное отображение русский строк?
а не жирно вам будет?

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Gloft » 2011-05-31 19:59:35

Вопрос один: как написать программу выводящую правильно строку "привет!" независимо от текущей кодировки консоли пользователя.
Да и не так уж и много я прошу помоему.

Гость
проходил мимо

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Гость » 2011-05-31 20:18:25

что значит не зависимо?
если у вас стоит китайская локаль
то русскими буками вы в ней никак не нарисуете

встречный вопрос
почему китайские программы не пишут по китайски в своих менюшках, названиях окон итд итп, на русских компьютерах?

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Gloft » 2011-05-31 20:23:06

Один из вариантов отсутствие шрифтов.

Гость
проходил мимо

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Гость » 2011-05-31 20:25:48

это справедливо только для Юникода, где присутсвует все кодировки, и может не хватать только шрифта
а в случае если появляется другая кодировка, то одних шрифтов маловато
должна быть локализация всей системы

Dambo
ефрейтор
Сообщения: 61
Зарегистрирован: 2009-11-27 22:29:58

Re: [freebsd C] кодировка вывода

Непрочитанное сообщение Dambo » 2011-06-01 11:48:01

Gloft писал(а):Вопрос один: как написать программу выводящую правильно строку "привет!" независимо от текущей кодировки консоли пользователя.
Да и не так уж и много я прошу помоему.
Вы можете вывести "правильно" только в той кодировке если там есть русские шрифты или их подобие.
Могу предложить способ велосипедный), по на создавать библиотек скомпилированных в разных кодировках, определять в стартовом приложении текущую кодировку локали и тащить подходящую библиотеку. Ещё(Очень давно) я видел в 1 приложении под контроллер(дос подобная ОС с хрен знает какой кодировкой, которая выводила русские буквы на жк), разработчик заранее составил словари и прям в исходники записывал крякозябры, которые в итоге нормально отображались там где их выводило ПО...