LINUX.ORG.RU

русские имена файлов в Mercurial

 ,


0

1

4-5 лет назад была такая тема, окончилось ничем. Вот повторно сабж.

Известно что в Bazaar нет такой проблемы. Я уже даже думаю, а может мне и на Bazaar переползти, а? Разумеется, лишь для репозитория с документацией, где имена файлов должны быть русскими, нравится мне это или нет - а либо да, либо не будет системы контроля версий.

TortoiseHg 2.10 и Mercurial-2.8, достаточно свежие версии. Как же сделать так, чтобы я мог смотреть русские имена файлов, пусть в винде их коммитят как есть, а мне чтобы в линуксе нормально смотреть. Хотя бы для одного репозитория с документацией.

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

Почему вендовый?

потому-что wine исправляет кодировку, делая из буквы «я» в имени файла байт 255, как это принято в Windows Russian Edition.

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

Вот интересно, а как ТС будет разгребать, свалку из имен файлов на русском, хинди, суахили, армянском, иврите, китайском, корейском и т.п.?

никак. Не бывает Windows, которая умеет два неангл языка сразу. Потому такую свалку этот маздайщик создать не сможет.

Поражаюсь с таких полиглотов! Это сколько же времени надо убить, чтобы выучить все языки мира вместе с письменностью?

есть гуглотранслятор. Например ты с лёгкостью поймёшь, что значит «olori buruku»

emulek
()
Ответ на: комментарий от tailgunner

А много - не тратят ни минуты.

Может быть, если это 1Cники или прочие DSLщики сурового ВПК родом из 8х.

Или только на ru.

Из категорий выше разве что. Т.е. литература локального характера и навряд ли к ней можно применять понятия «всем понятные термины»

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

Может быть

На этом дискуссию о необходимости комментариев на английском можно закрыть.

DSLщики сурового ВПК родом из 8х

Походу, работу в ВПК ты знаешь только по мифам :) Кстати, некоторые военные разработки ведутся международными командами.

Или только на ru.

Из категорий выше разве что.

Нет, но здесь долго объяснять.

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

На этом дискуссию о необходимости комментариев на английском можно закрыть.

Не нужно обрезать фразы так, чтобы контекст менялся. И дискуссии никакой не было, хотя пытаешься её устроить. Я ниже нигде не пишу, что коменты должны быть на eng, но даю объяснение почему их используют.

Нет, но здесь долго объяснять.

было бы тебе ещё что объяснять.

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

Не нужно обрезать фразы так, чтобы контекст менялся

Смысл не изменился.

И дискуссии никакой не было

Здесь, между тобой и мной - не было. А вообще на ЛОР - была, есть и будет.

tailgunner ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

У меня тоже нет, а у коллег - да.

ну дык и души коллег, что-бы взяли систему, которая умеет ВСЕ буквы, а не только русские и английские. Проблема в этой системе. Ибо только в русской венде байт 255 видится как «я», в какой-нить другой венде тот же байт выглядит иначе. Потому тебе по любому писать в репе, КАКАЯ это кодировка. Потому-что говновенда не умеет сохранять файлы с именами в любых языках. Только в английском и в ещё ОДНОМ каком-то, например в русском.

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

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

Сможет: он же меркуриалом пользуется. Кто-то будет коммиты из Турции делать, кто-то — из Китая...

ну можно сделать патч, который определяет тип маздая, и перекодирует в юникод имена, а потом перекодирует обратно. В принципе это возможно, только надо делать поддержку Over9000 языков. Тебе оно надо? Мне — не нужно. Мне не нужна поддержка даже одного маздая.

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

Да при чем здесь это? Изначально речь была о том, что только ССЗБ называют файлы буквами с кодами выше 127!

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

ИМХО комментарии в общем случае вообще не нужны. Хороший код понятен и без комментариев. Комментарии нужны только в плохом коде. Ну а если код плохой, то хотя-бы комменты должны быть понятны хотя-бы самому пейсателю. Т.е. на родном языке.

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

Изначально речь была о том, что только ССЗБ называют файлы буквами с кодами выше 127!

в общем-то так оно и есть. Потому-что с этими кодами могут возникнуть проблемы. Даже если у тебя есть все коды, то букву «ї» очень легко спутать с «i», я уж не говорю о букве «о» (русской) или там «Γ» (а эта ВНЕЗАПНО греческая: 0xCE 0x93).

Возможны также комбинации байт, для которых НЕТ СИМВОЛОВ. Это тоже ведёт к проблемам, например НЕСИМВОЛ не совпадает с точкой в regex. Это не баг, а фича — ведь точка совпадает с любым СИМВОЛОМ, но скажем 0xD0 0xD0 символом НЕ является. Как будет работать программа — сам Патрег не в курсе.

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

комментарии в общем случае вообще не нужны

А лет через 5 откроешь ты код без комментариев и будешь долго и мучительно пытаться понять, что делает та или иная функция и нафига нужны те или иные глобальные переменные!

Eddy_Em ☆☆☆☆☆
()

Рано или поздно поддержка Python 2 закончится, и меркуриалу придётся-таки переползать на тройку и юникод. Тут-то и вылезут все его гнилые кишки. Мэтт дебил, меркуриал быдлокод. Линус тоже дебил, в его поделии с юникодом ещё хуже.

kot_otbelivatel
()
Ответ на: комментарий от crowbar

На вопрос «Почему?» в лучшем случае можно услышать про каких-то «иностранных разработчиков».

Главная беда комментариев на дикарских языках в том, что у туземцев серьезные проблемы с единой и общепринятой терминологией. Поэтому намного логичнее пользоваться цивилизованным языком, где вся терминология давно устоялась и разночтений не бывает.

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

А лет через 5 откроешь ты код без комментариев и будешь долго и мучительно пытаться понять, что делает та или иная функция и нафига нужны те или иные глобальные переменные!

у функции должно быть нормальное название.

А глобальные переменные не нужны вовсе.

emulek
()
Ответ на: комментарий от kot_otbelivatel

Рано или поздно поддержка Python 2 закончится, и меркуриалу придётся-таки переползать на тройку и юникод. Тут-то и вылезут все его гнилые кишки. Мэтт дебил, меркуриал быдлокод. Линус тоже дебил, в его поделии с юникодом ещё хуже.

а может это не все вокруг дебилы, не?

у меня ртуть нормально работает. Быстро и качественно. Как и Linux. Наверное проблема в тебе.

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

Главная беда комментариев на дикарских языках в том, что у туземцев серьезные проблемы с единой и общепринятой терминологией. Поэтому намного логичнее пользоваться цивилизованным языком, где вся терминология давно устоялась и разночтений не бывает.

ты очень слабо знаешь эти «цивилизованные языки» если говоришь такие глупости. CS ещё очень молодая область знаний, и терминология здесь ещё только начинает развиваться. Терминология устоялась только лишь в древних областях знаний. А в CS — увы. Надо ждать лет так 500.

emulek
()
Ответ на: комментарий от I-Love-Microsoft

Нет, они просто скажут «иди нах со своей системой контроля версий».

ну патч для отдельно взятого языка написать несложно. Сделай, я-бы сделал, проблема в том, что маздая у меня нет, где я это всё тестировать-то буду? Там как-то нужно будет узнать, что мы в маздае, причём именно в русском. И когда твой патч это определит, то он должен будет все имена на входе перекодировать в utf-8, а на выходе — обратно в cp1251. Вот нагуглил тебе в помощь: https://pypi.python.org/pypi/iconv/1.0

(не пробовал. Но вроде оно)

emulek
()
Ответ на: комментарий от I-Love-Microsoft

они просто скажут «иди нах со своей системой контроля версий».

Если у них есть полномочия и возможность сказать это, они тебе так и скажут в любом случае :) Использование VCS - это поначалу всегда геморрой (и подозреваю, что в случае форматов с отсуствующим diff этот геморрой никогда себя не оправдает). Впрочем, можно попробовать SVN с DAV autoversioning.

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

У них полномочия сказать «ну чо ты пристал если русский язык не поддерживается». Но, он поддерживается, но лишь если ты на винде. Я о себе думаю - как лично Я такой репозиторий читать буду?

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

Хорошо, пусть даже для русского лишь только языка - workaround, не связанный с разработкой, он есть?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от emulek

Тебя, тупую и необразованную свинью, которая обосралась во всех темах, в которые влезла, вообще никто не спрашивал. Вали отсюда, ламер.

Английская терминология еще в 60е устаканилась. Русская терминология была единой и стандартной, пока мы были Цивилизацией. А с 91го мы дикари, и своей терминологии у нас нет.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

Хорошо, пусть даже для русского лишь только языка - workaround, не связанный с разработкой, он есть?

Я не знаю (венду вижу только со стороны). По уму, если в ней есть возможность работать с UTF-8, всё должно получиться. Конечно, в pre-commit хуке всё равно нужно проверять, что имена файлов в нужной кодировке.

Ну или можно стать героем^W^Wреализовать FixUtf8-NG или WindowsUTF8Plan

tailgunner ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

где проверить? man virtualbox

No manual entry for virtualbox

emulek
()
Ответ на: комментарий от I-Love-Microsoft

Хорошо, пусть даже для русского лишь только языка - workaround, не связанный с разработкой, он есть?

тебе уже дали три:

1. юзать раздел FAT/NTFS

2. юзать wine

3. запилить патч.

Будь мужиком, определись и сделай. Это ТЕБЕ надо, а не нам.

Вот такой он OpenSource, всякую ерунду нужную только тебе делать придётся только тебе. Увы.

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

Тебя, тупую и необразованную свинью, которая обосралась во всех темах, в которые влезла, вообще никто не спрашивал. Вали отсюда, ламер.

это приказ? Ты тут главный, да? Нет? Тогда я срал на твои приказы. Если я тебе не нравлюсь — смирись.

Английская терминология еще в 60е устаканилась. Русская терминология была единой и стандартной, пока мы были Цивилизацией. А с 91го мы дикари, и своей терминологии у нас нет.

её и не было, если ты не знал. Только идиоты называли HDD как НЖМД. Остальные «термины» были точно такими же убогими и естественно не прижились IRL. Увы, это не авиация, в которой русские «самолёт» и «вертолёт» таки прижились, хотя и достаточно глупые по сути. Но в годы «приживания» данных терминов шутить не любили. За любую шутку можно было быстренько загреметь в места не столь отдалённые. С тех пор времена поменялись, и всем стало пох.

А вот ты — увы, не слишком умный. Ничего не случилось с русскими людьми в 1991ом году. Люди остались точно такими же. И только наивный мальчик может думать, что в 1991ом некие НЛО облучили Эту Страну Лучом Смерти, и люди заколдовались и ВНЕЗАПНО стали «дикарями». Такое только в сказках бывает, IRL всё было совсем не так. IRL просто к власти пришли другие люди, и стали опять делить ресурсы. Как обычно. Сейчас вроде более-менее поделили. Всё хорошо. А вот терминология тут совсем не при чём.

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

Не только мне, а ВСЕМ надо чтобы был русский язык в именах файлов ;)

Вот использовать TortoiseHg под Wine - идея очень интересная. Наверное, самое предпочтительное временное решение.

И кстати, под Wine TortoiseHg действительно исправляет имена файлов? Или это предположение и мне его предстоит проверить?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Не только мне, а ВСЕМ надо чтобы был русский язык в именах файлов

нет. Только тебе. Мне например не нужно, т.к. УМВР. Я русские буквы стараюсь не юзать, но mercurial их понимает. Пруф:

$ hg log -v -r tip
набор изменений:  0:ed8e823dfee5
метка:            tip
пользователь:     я
дата:             Sat Dec 21 01:52:28 2013 +0400
файлы:            тестовый файлик
описание:
i

И кстати, под Wine TortoiseHg действительно исправляет имена файлов?

оно не исправляет, а наоборот корёжит в стиле венды. Т.е. если приложение в маздае создаст файл с именем '0xFF', получится имя 'я'. В линуксе тоже будет имя 0xFF, вот только ты прочитать его не сможешь, потому-что в utf-8 данному байту не сопоставлено символа. По определению. См. http://ru.wikipedia.org/wiki/UTF-8#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0... для более глубокого изучения. В Linux требуется создать файл с именем 0xD1 0x8F, что-бы пользователь увидел имя «я».

wine естественно в курсе, и потому, перед тем, как создать файл, wine переделывает поступивший код 0xFF в правильный 0xD18F. А вот как wine определяет, что «венда» русская — я не знаю. Наверное смотрит $LANG. Тут я не в курсе. Но как-то оно определяет, ибо я проверял — WinRAR+wine+Slackware отлично работает. Твоя черепашка тоже должна, чем она хуже винрара?

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

это приказ?

Это совет. Если не хочешь продолжать позориться и смешить публику, слейся по-тихому.

её и не было, если ты не знал.

Ты это говоришь офицеру ПВО, который ЦВК может с закрытыми глазами протестировать и починить. У страны, создавшей ЦВК, Эльбрус, Минск, по-твоему, не было стандартной терминологии?!?

Да, был «магазин» вместо «стека», был «конвейер» вместо «пайплайна». И что такого?

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

в 1991ом некие НЛО облучили Эту Страну Лучом Смерти, и люди заколдовались и ВНЕЗАПНО стали «дикарями»

Твоя мамка - шлюшка.

Цивилизация - штука очень тонкая, слетает легко и непринужденно. Была Империя, была цивилизация. Кончилась Империя, кончилась и цивилизация. Где все те институты, которые занимались стандартизацией? Где Партия, которая процессы стандартизации контролировала и за самодеятельность наказывала?

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

Ясно, попробую.

ЗЫ У меня, разумеется, тоже русские файлы прекрасно в линуксе добавляются в репозиторий, только под виндой коробится, потому что винда = говно :)

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от kot_otbelivatel

Рано или поздно поддержка Python 2 закончится, и меркуриалу придётся-таки переползать на тройку и юникод.

перейдут на bytes() и будут такие же проблемы.

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

был «магазин» вместо «стека»

«Стек» был.

был «конвейер» вместо «пайплайна»

«Конвейер» и сейчас есть.

И что такого?

Когда я встретил термин «математическая память», некоторое время гадал, что это такое.

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

Это совет. Если не хочешь продолжать позориться и смешить публику, слейся по-тихому.

спасибо большое. Ваше мнение очень важно для нас.

Ты это говоришь офицеру ПВО

а... Извини, надо было сразу сказать, что офицер. Тут поправочку надо вводить, у вас же синус в военное время может достигать значения 4.

У страны, создавшей ЦВК, Эльбрус, Минск, по-твоему, не было стандартной терминологии?!?

ага. «была». Шутник... То, что во всём мире называли 7400, в Этой Стране называлось 155ЛА3. Но офицерам про это было известно лишь если звание не ниже майора ГРУ. Остальным офицерам этого знать не полагалось.

Да, был «магазин» вместо «стека», был «конвейер» вместо «пайплайна». И что такого?

оно «было» только в твоей методичке. IRL был таки стек и были пайпы. Или ты действительно думаешь, что идентичность архитектур PDP и советских СМ — случайное совпадение? И те, кто делал и программировал СМ действительно называли винчестер как «НЖМД»? Ага, а «стек» называли «магазином»? Не...

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

Твоя мамка - шлюшка.

нет у меня мамки. Т.ч. ты врёшь.

Цивилизация - штука очень тонкая, слетает легко и непринужденно. Была Империя, была цивилизация. Кончилась Империя, кончилась и цивилизация.

нет никакой цивилизации, увы. Есть только сказки про светлое будущее. Разные сказки. Вот в СШП эта сказка называется «American Dream», у нас — уехать в америку. В Той Стране это называлось «Светлое Будущее». Какая разница, как называть одну и ту же сказку?

Где все те институты, которые занимались стандартизацией? Где Партия, которая процессы стандартизации контролировала и за самодеятельность наказывала?

эти институты и партийцы только пилили народные деньги. Обычные дармоеды. Ты из них что-ли?

emulek
()
Ответ на: комментарий от I-Love-Microsoft

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

венда не говно, а must die. Обоснование: производители маздая делят людей на категории для того, что-бы люди не могли строить и совершенствовать маздай, а могли его только покупать и плакать «запилите мне дверь». Т.е. даже если кто-нить и сделает что-нить полезное, то это полезное не взлетит у 95% юзеров. Потому-что 95% юзеров например говорят не так как я и ты, а на каких-то иных языках, с которыми мы не знакомы. Ни ты и ни я не в состоянии осилить ВСЕ языки. Даже сама мысы до сих пор не может сделать нормальную переключалку рус/лат. Сил не хватает. Русских людей, которым это нужно, просто очень мало, и мысы не может себе позволить удовлетворять хотелки очень малого процента юзеров (которых 3.5, если не считать русских халявщиков юзающих условно бесплатную венду вроде OEM, или даже безусловно бесплатную семёрку максимальную)

В самом начале, в Win95, требовалась 100%я совместимость с MS-DOS. А там имена файлов регистроНЕзависимые. В ASCII это решается тривиальным сбросом 5го бита. Про другие символы тогда никто не думал. Потому в Win95 тоже были такие имена. И в WinNT — тоже. Естественно в NT6 ничего менять не стали, ибо это невозможно в принципе. Как была cp1251, так и осталась (а в консоли 866я). Специально для русских делаются и продаются наборы костылей, которые называются в продаже «Win 7 русская». Очень удобно, ибо OpenSource не заработает ещё и по этой причине — сложно сделать поддержку Over9000 языков отдельно взятому быдлокодеру emulek'у. Увы. А надо, если я хочу, что-бы мой код был совместим с MS-DOS и выше(вплоть до восмёрочки). Потому-то я и не хочу... Такие дела...

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

У меня есть простой скрипт (сам писал) на Python, который обрабатывает файлы (и сохраняет их имена в файл), в том числе с русскими символами. Если этот скрипт перенести на винду и запустить работать с этими же файлами, чьи имена сохранились в файле, то оно уже их не понимает. Если я создам файл заново под виндой - то он уже понимается. т.е. 100% воспроизведение проблемы как и у Mercurial.

Может это вообще на уровне питона проблема? А на нем как известно, написан Mercurial. Разработчики не стали париться. Может там класс, который отвечает за имя файла, не переводит его в единое внутреннее представление, например в UTF-8.

Вот взять тот же Qt (особенно 5-й) - имена файлов в юникод (точно не знаю в какой, возможно UTF-8) представляются, т.е. на любой ФС и любой ОС я всегда прочту «мой файл.txt» именно так и никак иначе...

А может в Python 3.X это уже исправили???

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от emulek

Вот мой скрипт:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import datetime
import hashlib
import fnmatch
import os
import sys


block_size = (1024*1024)


def recursive_glob(treeroot, pattern):
    results = []
    for base, dirs, files in os.walk(treeroot):
        goodfiles = fnmatch.filter(files, pattern)
        results.extend(os.path.join(base, f) for f in goodfiles)
    return results


def get_md5(filename):
    f = open(filename, "r")
    if not f.closed:
        md5 = hashlib.md5()
        sz = os.path.getsize(filename)
        count = sz / block_size + 1
        print("processing MD5 for " + filename + " size= " + str(sz) + " count= " + str(count))

        for i in range(0, count):
            data = f.read(block_size)
            #sys.stdout.write("block size= " + str(len(data)) + " " + str(i) + "\r")
            sys.stdout.write("reading " + str(i) + " of " + str(count) + " Mb\r")
            md5.update(data)

        digest = md5.hexdigest()
        print(digest + " is MD5 of " + filename + "\n")
        f.close()
        return digest


def check_rmd5(filename):
    print("check_rmd5: checking hashes...\n")
    hashes = []
    md5_file = open(filename, "r")
    if not md5_file.closed:
        hashes = md5_file.readlines()
        md5_file.close()
    else:
        print("can't open " + filename + " ERROR")

    files_notfound = []
    files_failed = []

    count_total = len(hashes)
    count_ok = 0

    print(hashes)
    print("begin check...")
    for hash in hashes:
        t0, t1 = hash[:32], hash[34:]
        f = t1[:-1]
        print("HASH=" + t0 + "  " + f)
        if os.path.exists(f):
            new_md5 = get_md5(f)
            if new_md5 == t0:
                count_ok += 1
            else:
                files_failed.append(f)
        else:
            files_notfound.append(f)

    print("\n\n")
    for item in files_notfound:
        print("NOT FOUND: " + item)

    print("\n\n")
    for item in files_failed:
        print("FAILED: " + item)

    print("\n\nworkdir= " + os.getcwd())
    print("SUMMARY: " + str(count_ok) + " OK of " + str(count_total) + " (" + str(len(files_notfound)) + " not found, " + str(len(files_failed)) + " failed)")


def main():

    if(len(sys.argv) == 2):
        print("args count " + str(len(sys.argv)))
        check_fn = sys.argv[1]
        check_rmd5(check_fn)
        return

    print("recursive MD5 creation tool...\n\n")
    files = recursive_glob("./", "*")
    hashes = []
    for f in files:
        md5 = get_md5(f)
        print("MD5 of " + f + " is " + md5)
        hashes.append(md5 + "  " + f)

    print("\n\nhashes:")
    print(hashes)
    print("\n")

    hfn = "rmd5_" + datetime.datetime.now().strftime("%Y%m%d_%H%M_%S") + ".md5";
    print("hash filename= " + hfn)
    md5_file = open(hfn, "w")
    if not md5_file.closed:
        for hash in hashes:
            md5_file.write(hash + "\n")
        md5_file.close()

    print("end...")


if __name__ == "__main__":
    main()
Тот класс, вероятно стандартный, что ищет файлы и дает их имена, как раз представляет их не во внутренней кодировке, а в кодировке ФС/ОС...

Странно что это так, странно что не внутренний формат.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Может это вообще на уровне питона проблема?

Не может. У тебя в скрипте настоящее мясо. В os.walk() нужно отдавать unicode строку, тогда мб выхлоп будет содержать правильные юникодные строки (это нужно тоже проверять)

if path is a Unicode object, the result will be a list of Unicode objects. Undecodable filenames will still be returned as string objects.

Далее делаешь open(..., «w») и write(md5.hexdigest() + " " + filename + «\n»). Собственно, не возникает у тебя вопроса в какой кодировке вообще пишешь эту строку в файл? И в какой потом её читаешь.

mashina ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Может это вообще на уровне питона проблема?

ниже. На уровне OS.

не переводит его в единое внутреннее представление, например в UTF-8.

не переводит. А зачем это нужно?

А может в Python 3.X это уже исправили???

ну как можно исправить глюк маздая из питона3? Ну может и можно написать костыль, который переводит кодировку в utf-8. Но такой костыль нужен только 3.5 русских маздайщиков, которые юзают Linux.

Проблема в том, что Windows до сих пор юзает однобайтовую кодировку, которая у всех разная. И с этим ничего не поделать, увы.

emulek
()
Ответ на: комментарий от mashina

Собственно, не возникает у тебя вопроса в какой кодировке вообще пишешь эту строку в файл?

зачем путаешь человека? Сам нихрена не понимаешь, и другим не даёшь. Вот у меня есть байт 0xFF, «в какой кодировке я записываю в файл этот байт?». Задумайся о дебильности этого вопроса.

Проблема возникает потому, что в Windows буква «я» имеет код 0xFF, а в линуксе 0xD18F. Потому имена файлов РАЗНЫЕ. Они только с виду одинаковые также, как буква О и буква O.

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

Но в Qt5, опрашивая список файлов в каталоге, я получаю именно UTF-8 строку (или что там в QString), и по моему опыту, на любой ОС эта строка будет идентичной и никакие кодировки этому не помеха.

Пока это голословное утверждение, а чуть позже я даже пример сюда запостю, который будет пруфом что это не уровень ОС, а то что платформа (в частности питон) не переводит во внутреннее, независимое от ОС, представление.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Но в Qt5, опрашивая список файлов в каталоге, я получаю именно UTF-8 строку (или что там в QString), и по моему опыту, на любой ОС эта строка будет идентичной и никакие кодировки этому не помеха.

ну значит в маздайном варианте оно перекодирует cp1251 (или что там, яхз) в свой внутренний вариант. Причём я даже не в курсе — какой именно. Явно не в wchar_t, потому-что по слухам в маздае они в 16 бит, и многие символы туда не лезут.

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

это не уровень ОС,

а то что платформа (в частности питон) не переводит во внутреннее, независимое от ОС, представление.

не переводит, и не должна. Имена файлов в Linux всегда НЕ переводились никуда. Даже тогда, когда были везде однобайтные кодировки. Потому мой файл из Slackware 10 будет выглядеть кракозябрами в Slackware 14. Ибо в десятке оно было в koi8-r.

Для ФС вообще нет абсолютно никакой разницы, какие именно биты в имени. Т.е. ФС плевать, как выглядит байт 0xFF. В силу того, что маленькие и большие буквы разные. Ну вот ФС и не лезет в представление имён. Ей просто всё равно.

emulek
()
Ответ на: комментарий от mashina

Тебе ниже анонимус дал очень хороший и мудрый совет. Почему ты им не пользуешься?

ты упорот?

1. где это «ниже»?

2. почему ты не последуешь совету выше от анона? Он ведь по твоему «мудрый», да? А по моему — тупой.

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

что идентичность архитектур PDP и советских СМ

ЕС и СМ - это уже после того, как все просрали, спасибо тов. Ершову. А ЦВК, Эльбрус и Минск были исключительно советскими разработками.

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