LINUX.ORG.RU
ФорумTalks

Работают ли современные дистрибутивы с локалями отличными от *.UTF-8?

 , , ,


3

4

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

export LANG=ru_RU.KOI8-R LC_ALL=ru_RU.KOI8-R
, всё равно имена файлов отображались как UTF-8. Насколько я знаю, иксы как таковые ничего кроме UTF-8 не знают.

Вопрос — как вообще в таком случае можно жить? Большая часть иксовых программ будет создавать файлы с именами в UTF-8 и не всегда можно без этого обойтись (например если файлы скачиваются браузером или это автосейвы локализованной игры), в консоли эти имена будут отображаться кракозябрами. Большая часть текстовых файлов (например скачанные из инета веб-страницы) будут требовать пропускания через iconv чтоб их прочитать.

Значит ли это, что не UTF-8 локаль будет создавать только проблемы, а помогать в редких случаях когда используются консольные утилиты типа tr, не умеющие (или не желающие) использовать юникод?

Eddy_Em, что скажешь?

P.S. Интересная ссылка про юникод.

★★★★★

Последнее исправление: Xenius (всего исправлений: 2)

Ответ на: комментарий от ubuntuawp

Название в UTF-8 - наркомания какая-то

Windows поддерживает не-ascii-имена файлов? Поддерживает. Значит чтоб можно было сказать, что он поддерживает UTF-8, должна быть функция, позволяющая создать файлы с именами, взятыми из utf8-строки.

Такой функции нет. Пример работать не будет.

Вывод: Windows UTF-8 не поддерживает

А вот в GNU/Linux этот пример компилируется и файл создаётся именно с тем именем, которое указано.

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

А чего ты иксы в КОИ8 не запустил?

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

Но не все, у некоторых есть косяки (если рукожопый быдлокодер не позаботился о enca).

То есть всё-таки, если использовать UTF-8 как системную локаль, проблемы с программами будут, и я полагаю, их гораздо больше чем если использовать *.UTF-8. В последнем случае проблемы только с man и tr и их можно смело игнорировать, так как скрипт, запускающий man легко патчится, да и вообще почти все маны на английском. А tr просто можно не использовать с русскими буквами, а применять вместо него sed 'y/абв/где/'

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

То есть всё-таки, если использовать UTF-8 как системную локаль, проблемы с программами будут, и я полагаю, их гораздо больше чем если использовать *.UTF-8

Не распарсил. Могу сказать, что если использовать КОИ8 как системную локаль, проблем меньше, чем с хрюникодом.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Lavos

У меня на современной (сегодня обновлял) генточке кои8р. Все ок, брат жив.

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

А в Battle for Wesnoth играешь? Там если русский язык, то сейвы будут на русском. Если так сделать, у тебя они сохраняются как надо или в UTF-8?

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

прошу прощения. по привычке начал скатывать в нацпол.

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

Если так сделать, у тебя они сохраняются как надо или в UTF-8?

Я же выше говорил. Отличить быдлокодера от нормального легко: если ты пытаешься файл сохранить, обозвав его по-русски, то у посредственного кодера он сохранится в местной локали, у быдлокодера — попытается сохраниться в хрюникоде, у идеального — вылезет сообщение с кучей мата, что юзверь — дебил и так делать нельзя.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Deleted

Не пожрут: накатываешь со зверЪ-дивиди образ и опять пользуешься. Так вендузятники и делают. И покуда будут компы, на которые можно накатить хрюнделя, хрюндель будет жив.

И чего удивляться-то? Хоть хрюндель — и говнище несусветное, но он — последний вменяемый мастдай. Спермерка и говнерка — вообще [censored].

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Не распарсил. Могу сказать, что если использовать КОИ8 как системную локаль, проблем меньше, чем с хрюникодом.

Опечатка, следовало читать как «не UTF-8 как системную локаль»

ОК, какие конкретно проблемы есть с KOI8?

С UTF-8 есть только одна незначительная проблема на которую натыкался конкретно я — некоторые гнутые тулзы с ним не так как ожидается работают, типа tr. Это ерунда имхо, тем более что можно использовать их именно для бинарной замены и в этом случае такое поведение даже желательно (например обрабатывать бинарные файлы).

С KOI8-R есть как минимум проблема в том, что нельзя сохранить файлы с иероглифами в именах, которые иногда встречаются в Сети и нельзя без костылей использовать tar-архивы сделанные на другой системе.

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

Я тоже думаю, что лучше бы UTF-VAR какой-нибудь сделали, где на 1 символ может быть сколько угодно байтов.

Система кодирования в UTF-8 позволяет в рамках нынешней модели задавать не до 6, а до 8 байт. Т.е. до 2^44 символов (если в подсчёте не ошибся). Только не представляю, зачем столько. Даже нынешних 2^32 должно хватить на всю обозримую историю человечества, ИМХО :)

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

какие конкретно проблемы есть с KOI8?

Кроме вышеупомянутых редких проблем с быдлокодом ничего нет. Зато плюсов дофига. То, что 1буква == 1байт — просто отлично!

нельзя сохранить файлы с иероглифами в именах

Ты — китаец/японец/etc? Нахрена тебе иероглифы?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Так и будут каждый день накатывать пока не надоест :}

Deleted
()
Ответ на: комментарий от Xenius

ОК, какие конкретно проблемы есть с KOI8?

Проблема всего одна — упоротые некрофилы.

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

Отличить быдлокодера от нормального легко: если ты пытаешься файл сохранить, обозвав его по-русски, то у посредственного кодера он сохранится в местной локали, у быдлокодера — попытается сохраниться в хрюникоде, у идеального — вылезет сообщение с кучей мата, что юзверь — дебил и так делать нельзя.

Может таки ,s/идеального/упоротого/ ?

Итак, вопрос: какие конкретные программы из тех которые ты использовал написаны быдлокодерами в понимании, изложенном в цитате выше?

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Gotf

Не поможет. В мозгу синтезируется :}

Deleted
()
Ответ на: комментарий от note173

UTF-32 позволяет вместить большинство символов, но не все.

Какие не позволяет? o_O

Из 2 млрд. символов, допустимых в Юникоде пока используется только чуть более миллиона. При чём в версии 6.0 задействовано 110 тыс. кодовых позиций: http://ru.wikipedia.org/wiki/Уникод

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

Если не веришь, то скомпилируй и запусти вот это

А при чём тут проблемы конкретных компиляторов? Файл-то я такой могу легко создать и работать с ним.

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

4.2
Как же мне распаковать архив со свежей vnкой^W документацией от японских товарищей?

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

Кроме вышеупомянутых редких проблем с быдлокодом ничего нет.

Можешь потестить конкретно battle for wesnoth и огласить результаты?

И конкретные назывния «быдлокода».

Ты — китаец/японец/etc? Нахрена тебе иероглифы?

Ну иероглифы может и не очень нужны, а вот латинские буквы с акцентами нужны. Они иногда встречаются в архивах с файлами.

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

упоротого линуксоида

Шиндоуз 8.1, модераторы подтвердят

Она спокойно работает с UTF-8 начиная с Win7

ага

..\main.cpp(9) : error C2065: ‘?‘?‘?‘?ђуђсђь: ­Ґ®Ўкпў«Ґ­­л© Ё¤Ґ­вЁдЁЄ в®а
..\main.cpp(9) : error C2146: бЁ­в ЄбЁзҐбЄ п ®иЁЎЄ : ®вбгвбвўЁҐ ";" ЇҐаҐ¤ Ё¤Ґ­вЁдЁЄ в®а®¬ "‘'ђзђу‘?‘'"
..\main.cpp(9) : error C2065: ‘'ђзђу‘?‘': ­Ґ®Ўкпў«Ґ­­л© Ё¤Ґ­вЁдЁЄ в®а
..\main.cpp(9) : error C2143: бЁ­в ЄбЁзҐбЄ п ®иЁЎЄ : ®вбгвбвўЁҐ ";" ЇҐаҐ¤ "return
Stil ★★★★★
()
Ответ на: комментарий от KRoN73

А при чём тут проблемы конкретных компиляторов? Файл-то я такой могу легко создать и работать с ним.

Притом, что UTF-16 != UTF-8. Файл создать можешь, но его имя не будет в UTF-8. Да и к тому же в Windows во многих местах вовсе не UTF-16 даже, а вообще USC2, которое не умеет символы за пределами базовой плоскости.

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

u8"यूनिकोड юникода.txt";
микрософтовским компилятором

а что вижуалстудия научилась в ютф литералы?

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

Видимо, имелись в виду проблемы с UTF8?

Не, с UTF8 я и так знаю какие проблемы, я же её использую. Я спросил, какие проблемы, если локаль не UTF8

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

а что вижуалстудия научилась в ютф литералы?

Ну это есть в стандарте C++11, значит версии после 2011 года должны уметь. Если на практике не умеет — значит не поддерживает стандарт, значит говно. Впрочем она вроде даже C99 (!) не поддерживает до сих пор?

Факт в том, что код работать не будет, даже если убрать u8 и сохранить сам файл в UTF8, потому что винда UTF-8 не поддерживает.

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

так и то, что конкретный компилятор некрокрестов не поддерживает - не доказательство неподдержки

ОК, скомпилируй другим компилятором. Всё равно же не заработает, так как кроме компилятора есть ещё стандартная библиотека.

Если стандартная библиотека не поддерживает — значит система не поддерживает.

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

какие конкретные программы из тех которые ты использовал написаны быдлокодерами в понимании, изложенном в цитате выше?

Не помню уже.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Xenius

Можешь потестить конкретно battle for wesnoth и огласить результаты?

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ты всё перепутал. У человека хотя бы с минимальными способностями к программированию, даже у быдлокодера, файлы будут сохраняться в юникоде. У существа же, не могущего в разумную деятельность, и только у него, файлы будут сохраняться в однобайтных кодировках. Ему не то, что программировать, ему метлу доверять опасно — столь сложный прибор существо осилить не в состоянии.

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

Ну это есть в стандарте C++11, значит версии после 2011 года должны уметь

классная логика %)

Факт в том, что код работать не будет, даже если убрать u8 и сохранить сам файл в UTF8, потому что винда UTF-8 не поддерживает.

буквально два вызова какой-то фигни типа MultibyteToWideChar и все заработает

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

не будет. у нынешнего говножелеза гарантия полтора года, а потом оно ломается к чертям собачим.

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

Вот так работает:

using System;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string filename = "यूनिकोड юникода.txt";
            BinaryWriter f = new BinaryWriter(new FileStream(filename,FileMode.Create));
            f.Write((byte)65);
            f.Close();
        }
    }
}

TheAnonymous ★★★★★
()

Насколько я знаю, иксы как таковые ничего кроме UTF-8 не знают.

Иксы тут непричём.

Вопрос — как вообще в таком случае можно жить? Большая часть иксовых программ будет создавать файлы с именами в UTF-8

Программы будут создавать файлы с именами в кодировке, указанной при монтировании ФС, содержимое - ну это уже зависит от самой программы.

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

Вот так работает:

Это понятно, а как насчёт не дотнетовских языков, особенно C и C++?

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