Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Кириллица в именах файлов
цитата
26/06/14 в 17:43
 densa
Был у меня работник на одном сайте, которых наделал файлов с русскими именами, после смены хостинга имена файлов оказались в хз какой кодировки.

например раньше было ресторан1.jpg
а сейчас в этой папке такие имена файлов
#U0420#U0435#U0441#U0442#U043e#U0440#U0430#U043d1.jpg

К сожалению поздно заметил и со старого хоста все удалено
Подскажите можно ли как то восстановить имена файлов?
цитата
26/06/14 в 18:53
 Yacc
Как-то так

Код:
<?php

$old_file_name = '#U0420#U0435#U0441#U0442#U043e#U0440#U0430#U043d1.jpg';

$new_file_name = preg_replace_callback(
    '/#U([0-9a-f]{4})/i',
    function ($match) {
        return mb_convert_encoding(pack('H*', $match[1]), 'cp1251', 'utf-16');
    },
    $old_file_name
);

rename($old_file_name, $new_file_name);
цитата
26/06/14 в 18:56
 densa
это куда подставлять?
цитата
26/06/14 в 19:01
 Yacc
Это надо сохранить в файл php в той же папке что и файл, который надо переименовать. И выполнить его.
цитата
26/06/14 в 19:02
 densa
файл переименовался в неповторимый набор символов &#1125;&#736240;&#6897;
цитата
26/06/14 в 19:10
 Yacc
Проверил - переименовало в Ресторан1.jpg, но у меня винда. Попробуй поменять cp1251 на windows-1251. Если нет, то я пас. icon_smile.gif
цитата
28/06/14 в 00:41
 Дартаньян
могу даром на питоне нафигачить скрипт.


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

import sys, os

for nfile in [f for f in os.listdir(sys.argv[1]) if f.startswith('#U')]:
   s = nfile.split('.')
   name = ''.join(chr(int(i[0:4], 16))+i[4:] for i in s[0].split('#U') if i)+'.'+s[1]
   os.rename(nfile, name)


Эта страница в полной версии