LINUX.ORG.RU

Как это ничем не можешь (любой текстовой редактор должен мочь)? Скорее всего ты в лог что-то не то пишешь и у тебя не UTF-32.

Короче, лог и код в студию по возможности.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от Harald

Но зачем городить говнокостыли? Лог должен уже писаться правильно из кода. Логи, которые надо чем-то обрабатывать для просмотра - признак эталонного говнокода.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Логи, которые надо чем-то обрабатывать для просмотра...

Ничего ничем обрабатывать ненадо, текст в юникоде для чтения.

normann ★★★
() автор топика
Ответ на: комментарий от greenman

Пока её не засрут 100500 программ. Если бы была универсальная система логирования для всех ОС, то было бы хорошо, а так если все будут срать в общий лог, то и grep перестанет помогать.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

код в студию

struct PreLogType{
	ssize_t wlen; ///<Кол-во символов (wchar_t) без учета завершающего нуля.
	wchar_t* msg;
};

struct PreLogType* preLogTable = 0;

_Bool copyToLog(const wchar_t* msg)
{
	size_t msglen;
	
	CONCERN_PRELOG_SIZE();
	
	msglen = wcslen(msg);
	preLogTable[preLogTop].wlen = msglen;
	preLogTable[preLogTop].msg
	= (wchar_t*)malloc(
		(preLogTable[preLogTop].wlen+1) * sizeof(wchar_t)
	);
	
	if(preLogTable[preLogTop].msg == NULL) return 0; //Нехватка памяти
	wmemcpy(preLogTable[preLogTop].msg, msg, msglen+1);
	
	++preLogTop;
	return 1;
}




//Где-то в коде:

write(logfd, preLogTable[i].msg, preLogTable[i].wlen*sizeof(wchar_t));






normann ★★★
() автор топика
Ответ на: комментарий от peregrine

gedit/kate не отрывают или о чем тред?

kate/kwrite не имеют 4-байтной кодировки в комплекте, а gedit показывает только латиницу, кирилицу в числа превращает.

normann ★★★
() автор топика
Ответ на: комментарий от peregrine

Код, что работает не так как того хочет пользователь — не обязательно говнокод.

Говнокод — код, что просто написан плохо. Но вполне может работать.

KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

А сам программист хочет, чтобы он так работал? Код, который работает не так, как того хочет разработчик, ну ты понял.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

А сам программист хочет, чтобы он так работал? Код, который работает не так, как того хочет разработчик, ну ты понял.

Почему вы так говорите про мой код, у вас есть такие сведения? Вопрос был не про код, а про редакторы, а вас зачем-то на код несет. Он работает правильно.

normann ★★★
() автор топика

Похоже ты забыл o BOM. Поправь и как минимум вим сразу подхватит

cvv ★★★★★
()
Ответ на: комментарий от peregrine

Ман не читай @ Логгер ругай

Для фильтров по юнитам ключ -u есть.

Radjah ★★★★★
()
Ответ на: комментарий от normann

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

Кстати, я выше скинул, как в vim выбрать кодировку UTF32, помогло?

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Код, который работает не так, как того хочет разработчик, ну ты понял.

Тут да :) Но речь была именно про *пользователя*

KennyMinigun ★★★★★
()
Ответ на: комментарий от normann

Век юникода, блин.

Век utf-8, вообще-то. Соответственно, прочие экзотические форматы — это для любителей приключений :D

KRoN73 ★★★★★
()

поставь триал-версию редактора UltraEdit (займет несколько минут), она полноценно будет работать 1 месяц. Там в меню «File» есть опция «Convert To» c Utf32-->Utf8. И вообще, это лучший текстовый редактор.

oblfan
()
Ответ на: комментарий от peregrine

Кстати, я выше скинул, как в vim выбрать кодировку UTF32, помогло?

Уже ушел с работы, теперь только в понедельник, дома нет машины с линуксом.

normann ★★★
() автор топика
Ответ на: комментарий от ashot

Что там в логе такое, что UTF-32 понадобился? Позы камасутры?

Там 21 век, пару десятков лет уж как пора его использовать.

normann ★★★
() автор топика
Ответ на: комментарий от KRoN73

Век utf-8, вообще-то. Соответственно, прочие экзотические форматы — это для любителей приключений :D

Как раз utf8 это экзотический формат потому что он придуман в качестве костылей между «однобайтовыми» программами и юникодом. Utf8 это временное решение для уже существующего кода который не могут/не хотят переписывать.

normann ★★★
() автор топика
Ответ на: комментарий от anonymous

а utf-8 чем плох для чтения? к чему такая экзотика?

Еотому что вся программа на юникоде работает, на полноценном, который в широких символах хранится.

normann ★★★
() автор топика
Ответ на: комментарий от normann

Еотому что вся программа на юникоде работает, на полноценном, который в широких символах хранится.

И чо? Какие-то сложности с экспортом в UTF-8? Он уже есть в библиотеке libfatchars: Релиз библиотеки libfatchars 0.4 и использующей её программы raskormiknigu 0.1 .

* int fputfatc(int, FILE *); - вывод UTF-8 символа в файл/текстовый поток; в случае EOF возвращает EOF, в случае некорректных данных возвращает -2.

int, как и wchar_t, 4 байта. Эта функция fputfatc() просто берёт code point, собирает соответствующий ему UTF-8 символ побайтово, и выводит его в файл.

http://saahriktu.org/downloads/libfatchars-0.5.tar.xz .

saahriktu ★★★★★
()
Ответ на: комментарий от normann

Экзотичность формата определяется его распространённостью и поддержкой в широком наборе софта. На сегодняшний день UTF-8 самая распространённая кодировка из всех, умеющих в юникод. Значит он не экзотический. Точно также винда, несмотря на все её недостатки, не является экзотической ОС.

KivApple ★★★★★
()

Пишу программу, она делает лог в файл, лог идет в юникоде (UCS4/wchar_t), а потом выясняется что я этот текст ничем прочитать не могу.

- Доктор, когда я вот вот-так вот делаю, у меня болит

- А вы вот вот так-вот не делайте

annulen ★★★★★
()
Ответ на: комментарий от saahriktu

И чо?

Ни чо.

Какие-то сложности с экспортом в UTF-8? Он уже есть в библиотеке libfatchars

Да нет, нет никаких сложностей, и для этого ненужно никаких библиотек. Только зачем?

normann ★★★
() автор топика
Ответ на: комментарий от normann

ты ничерта не смыслишь. Нет кодировки «юникод», все эти UCS-2, UTF-16, UCS-4, UTF-32 это настолько же «юникод», насколько и UTF-8, с той разницей, что UTF-8 лучше лежит в памяти и быстрее обрабатывается.

thesame ★★★★
()
Последнее исправление: thesame (всего исправлений: 1)

размер wchar_t не обязательно 4 байта, размер зависит от конкретной операционной системы и компилятора:

«размер типа wchar_t определяется компилятором, вплоть до минимальных 8 бит. Соответственно, приложения, которым требуется сохранять переносимость на различных C и C++ компиляторах, не должны использовать wchar_t для хранения Unicode-текста. Тип wchar_t предназначен для хранения широких символов в том виде, в котором их понимают конкретные компиляторы, и это может не соответствовать Юникоду».

попробуй использовать char32_t/u32string.

Int64 ★★★
()

немного интересует причина именно UTF-32 для логов.
Просто обычно если нужна много-языковая поддержка останавливаются на utf8 или на крайний случай utf16(если оффтоп)

Atlant ★★★★★
()
Ответ на: комментарий от normann

Как раз utf8 это экзотический формат

ИМХО, ты путаешь экзотику и эзотерику ;)

Utf8 это временное решение

Боюсь, что это уже навсегда :D

KRoN73 ★★★★★
()
Ответ на: комментарий от thesame

ты ничерта не смыслишь

С чего такой вывод?

Нет кодировки «юникод», все эти UCS-2, UTF-16, UCS-4, UTF-32 это настолько же «юникод», насколько и UTF-8,

А кто-то здесь утверждает обратное?

что UTF-8 лучше лежит в памяти и быстрее обрабатывается.

А нука набросай-ка мне алгоритм подсчета сколько точно памяти нужно выделить для помещения в нее строчки «ты сам ничерта не смыслишь, а умничаешь» в формате utf-8.

normann ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.