LINUX.ORG.RU

пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ

 , ,


2

1

Это мне такое VSCode сейчас наделал в файлах с cp1251 при поиске и глобальной замене. Менял-то я английские слова. А сломались русские.

Из любопытства погуглил эти буквы - они много где встречаются.

А что это? Почему именно эти? Как получить

пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
из абсолютно любого текста кириллицей в cp1251?

★★★★

А что это?

Что-то на однобитном.

Почему именно эти?

Наиболее благозвучно для кошек.

Как получить пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ из абсолютно любого текста кириллицей в cp1251?

sed s/.*/пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ/

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Это уже в обратную сторону, когда текст уже испорчен в ������.

Надо придумать как слово «мир» (EC E8 F0) VSCode умудрился сначала «���» сделать в фоне при замене совсем других слов, а потом уже при открытии файла в 1251 глазам нарисовать «пїЅпїЅпїЅ».

День ковыряния псу под хвост. Хотел в древнем проекте на php5 заменить всякое mysql_xxxx на свои обёртки, чтоб хотя бы запускалось в php7. Назаменял.

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

Нет. Я не умею в git.

Да и чем бы он помог? После каждой замены одной deprecated на современный аналог завёрнутый в свою функцию делать новую ветку (или как оно там называется)?

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

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

Нет. Я не умею в git.

Ничо, хипстеры ещё способны на последнее усилие. Сейчас поднапрягутся и высрут то, что будет после гита. А то как это, более 15 лет одно и то же, да ещё к мозгам требовательное.

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

как слово «мир» (EC E8 F0) VSCode умудрился сначала «���» сделать

Как обычно. Некоторый код предполагает, что всё поступающее закодировано в UTF-8. Русские буквы в cp1251 обычно не являются корректными последовательностями, поэтому читающая функция преобразует их в �.

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

Пытался почитать исходники vscode, которые даёт арчевский asp - ни бельмеса не понял. Что-то вокруг FindReplaceAll должно быть.

В редакторе же VSCode понимает настройки для кодировки проекта. В теории - значит где-то внутри FindReplaceAll эти настройки не учитываются что ли. Причем - через раз. Как минимум там точно есть два варианта _regularReplaceAll и _largeReplaceAll, которые вызываются в зависимости от количества найденных вхождений, вроде бы. Но чем они отличаются - не могу понять.

Ладно, к псам. Повторю все эти замены на свежей копии проекта каким-нибудь NetBeans что ли.

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

Тем бы, что не случилось такой ситуации

А можете пояснить?

Вот хочу заменить все вхождения букв mysql_query на foo_my_query в некотором каталоге. Глобальный поиск находит тысячи вхождений в сотнях файлов. Нажимаю «заменить все».

Вот тут предлагается сделать git push ?

И только теперь меняю следующие тысячи вхождений mysql_fetch_array на foo_my_fetch_array ? И опять push?

Вы правда бы так делали? Или я что-то не понимаю?

---

P.S. Средствами NetBeans всё чудесно заменилось и не сломалось. Просто любопытна ваша теория про помощь git.

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

Вот хочу заменить все вхождения букв mysql_query на foo_my_query в некотором каталоге.

sed -i

И не надо что-то там корячить в глючных редакторах.

А можете пояснить?

Поясняю: в git diff ты ясно видишь, что именно изменилось в рабочей копии, и если есть какие-то случайные лишние правки, то понятно, где они и в каком объёме.

Также можно взять результат diff-а как файл, удалить из него лишние правки и затем применить как патч заново на чистую рабочую копию.

На самом деле это и без git можно делать, при помощи обычных diff, patch и нескольких каталогов. Но с git в разы удобнее.

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

sed -i

Это, конечно, прекрасно. Но хочется же хотя бы выборочно посмотреть, что там нашлось и точно ли это всё надо менять.

---

Вообще - вся история вокруг одного любительского сайтика, который делал людям в 2004-2006 годах. Делал-то любительски, за интерес. Но люди им до сих пор пользуются вполне себе коммерчески можно сказать. Не то чтобы напрямую им деньги зарабатывают, но косвенно.

Всё бы ничего - только то место, где он лежит, теперь хочет исключительно WMZ за оплату VPS. И людям прям сложно объяснить, как выворачиваться с переводом рублей из Сбера в WMZ. Жалко людей.

Нашел тут в Новосибирске хостинг с VPS. И дешевле, и роднее, и с переводами денег никаких проблем. Хочу людей сюда перевести. Ну, и сразу в php7 тогда уж, раз такая пьянка.

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

Это, конечно, прекрасно. Но хочется же хотя бы выборочно посмотреть, что там нашлось и точно ли это всё надо менять.

Я через grep обычно это делаю. Очень удобно.

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

Я бы, скорее всего, ковыряние древнего проекта начал с тотального перевода на UTF-8, в помощь. Хотя фиг его знает, может, у PHP свои заморочки в этом плане.

У меня был опыт с большим пластом древнего кода коллективного авторства на плюсах, где примерно 80% кода исходников было в koi8-r, 19% в cp1251 и оставшийся процент от шибко грамотного автора уже в юникоде. Ничего, с помощью find && enca всё унифицировал. Да, специально для комментаторов в духе «в исходниках не должно быть никаких нелатинских символов» отвечу, что речь шла про сильно специализированное заказное ПО, которое с вероятностью 99,99% никогда не выйдет за пределы страны и которому даже английский UI вряд ли понадобится, поэтому делать там по международному фэн-шую — значит, плодить в больших количествах мёртвые никому не нужные строковые константы, продублированные на двух языках.

hobbit ★★★★★
()

на вашем месте я бы попробовал поковырять iconv, чтобы определить, какие файлы и из каких кодировок нужно перевести на Unicode, использовать ли >1 байта на символ или же расширенный набор символов ASCII – но скорее всего, конечно, это будет конверсия из cp1251 (учитывая локаль системы и конкретные привязки символов к их кодам в момент создания, может быть местами cp866, cp1252 или что угодно другое, нужно изучить это) в utf-8 (ru_RU.UTF-8) c CR&LF. сделать копию проекта, конвертировать в этой копии все файлы и попробовать веб-сервер их заставить отдавать и парсить для проверки на ошибки.

в гите и без гита есть diff(tool), который поможет создать патч именно для тех мест, что требуют изменений, и через гит это будет проще: нужно в копии директории с исходниками создать первый коммит со всеми файлами, вторым же коммитом доставить этот самый diff с измененной кодировкой, впоследствии или делать новые коммиты, дабы поправить связанные с этим ошибки, или писать

...
git reset HEAD~1
git add .
git commit

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

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

Спасибо. Интересно.

hobbit

ковыряние древнего проекта начал с тотального перевода на UTF-8

План был - для начала просто заставить работать.

Там же и вся БД в 1251.

На текущий момент задача: «перевести людей туда, где они сами могут оплачивать свои ресурсы без акробатики». На случай если сам внезапно сдохну.

Факультативная задача: «перевести на максимально типовые инструменты, чтобы могли нанять человека со стороны». Опять на тот же случай.

И уже совсем необязательная задача: «переписать это всё в приличном виде на современных технологиях и кодировках». Это как раз на случай наоборот, если внезапно не сдохну.

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

Вообще - вся история вокруг одного любительского сайтика, который делал людям в 2004-2006 годах.

Глобальный поиск находит тысячи вхождений (mysql_*) в сотнях файлов

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

Нет. Я не умею в git.

Прям эталонный эталон того, как делать нельзя и полностью непрофессионально. Ну как так то…

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

«перевести людей туда, где они сами могут оплачивать свои ресурсы без акробатики»

Правильно, исключение bus factor.

«перевести на максимально типовые инструменты, чтобы могли нанять человека со стороны»

Тоже правильно и очень знакомо. Но даже в одно лицо если программировать/обслуживать, любой vcs (сейчас предпочтителен, конечно, git) обязателен уже много-много лет.

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

Солнышко... Люди почти двадцать лет получают пользу от того труда.

У вас много таких проектов? Какие критерии профессионализма, кроме пользы людям могут быть?

Сейчас вот работаю в профессиональной конторе. За деньги. Офигеть как профессионально.

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

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

Там же и вся БД в 1251.

При конвертации в юникод средствами самой БД сможешь столкнуться с весёлым глюком - некорректные символы. В таком случае дамп и iconv с параметром: https://gangmax.me/blog/2021/05/10/how-to-ignore-the-illegal-input-sequence-at-position-error-of-iconv/

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

Люди почти двадцать лет получают пользу от того труда.

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

Понятно. Очень знакомо, но акцент не туда.

Надо не только ночью накодить/поднять проект, отдать его на 20 лет в свободное плавание и гордиться этим. Но и предусмотрительно убедить владельцев поддерживать его (заодно и выхлоп будет небольшой), иначе технический долг безусловно пересилит любую прокрастинацию в будущем.

Как раз сейчас наблюдаю несколько таких проектов, которые в диких муках пытаются обновиться из старых недокументированных систем после срабатывания bus factor.

Dimez ★★★★★
()