Задать вопрос
  • Как определить кодировку и перекодировать имена папок?

    guvijur
    @guvijur Автор вопроса
    Практик, кинестетик, ретроград и консерватор
    Есть дополнение:
    import base64
    import re
    import tkinter as tk
    from tkinter import filedialog, messagebox
    import pyperclip  # Для работы с буфером обмена
    
    def decode_utf7_folder_name(encoded_name):
        # Удаляем '&' в начале и заменяем '-' в конце на '=='
        encoded_name = encoded_name.replace('&', '').replace('-', '==')
        
        try:
            # Декодируем из base64
            decoded_bytes = base64.b64decode(encoded_name)
            
            # Преобразуем из UTF-16BE в UTF-8
            decoded_name = decoded_bytes.decode('utf-16be')
        except Exception as e:
            print(f"Ошибка при декодировании строки '{encoded_name}': {e}")
            decoded_name = encoded_name  # Возвращаем исходное имя при ошибке
        
        return decoded_name
    
    def decode_path(path):
        # Ищем все закодированные имена, начинающиеся с '&' и заканчивающиеся на '-'
        encoded_names = re.findall(r'&[A-Za-z0-9+]+-', path)
        
        # Создаем массив для хранения декодированных имен
        decoded_names = {}
        
        # Декодируем каждое найденное имя и сохраняем в словарь с оригинальным именем
        for encoded_name in encoded_names:
            decoded_name = decode_utf7_folder_name(encoded_name)
            decoded_names[encoded_name] = decoded_name
        
        # Теперь заменим закодированные имена на декодированные, сохраняя все остальные символы
        for encoded_name, decoded_name in decoded_names.items():
            path = path.replace(encoded_name, decoded_name)
        
        return path
    
    def on_decode_button_click():
        input_path = entry.get()  # Получаем введённый путь
        if input_path:
            decoded_path = decode_path(input_path)
            result_text.config(state=tk.NORMAL)  # Разрешаем редактирование
            result_text.delete(1.0, tk.END)  # Очищаем старый результат
            result_text.insert(tk.END, decoded_path)  # Вставляем новый результат
            result_text.config(state=tk.DISABLED)  # Делаем поле только для чтения
        else:
            messagebox.showwarning("Предупреждение", "Пожалуйста, введите путь для декодирования.")
    
    def on_browse_button_click():
        folder_selected = filedialog.askdirectory()  # Открывает диалог для выбора каталога
        if folder_selected:
            entry.delete(0, tk.END)  # Очищаем поле ввода
            entry.insert(0, folder_selected)  # Вставляем выбранный путь в поле ввода
    
    def copy_to_clipboard():
        # Получаем текст из результата и копируем в буфер обмена
        result_text.config(state=tk.NORMAL)  # Разрешаем редактирование
        result_text_content = result_text.get(1.0, tk.END).strip()  # Получаем текст без лишних переносов
        result_text.config(state=tk.DISABLED)  # Делаем поле только для чтения
        pyperclip.copy(result_text_content)  # Копируем текст в буфер обмена
        messagebox.showinfo("Успех", "Результат скопирован в буфер обмена.")
    
    # Создаем окно
    window = tk.Tk()
    window.title("Декодер пути MDaemon")
    
    # Размеры окна с минимальными размерами
    window.geometry("800x500")
    window.minsize(800, 500)
    
    # Метка для инструкции
    label = tk.Label(window, text="Введите путь для декодирования:")
    label.pack(pady=10)
    
    # Поле ввода пути с растягиванием по ширине
    entry = tk.Entry(window, width=50)
    entry.pack(pady=5, padx=25, fill=tk.X)  # Растягиваем по ширине окна с отступами
    
    # Кнопка для выбора каталога
    browse_button = tk.Button(window, text="Выбрать каталог", command=on_browse_button_click)
    browse_button.pack(pady=10)
    
    # Кнопка для декодирования пути
    decode_button = tk.Button(window, text="Декодировать путь!", command=on_decode_button_click)
    decode_button.pack(pady=10)
    
    # Заголовок для поля результата, по центру
    result_label = tk.Label(window, text="Декодированный путь:")
    result_label.pack(pady=5, anchor="center")
    
    # Поле для вывода результата, доступное только для чтения
    result_text = tk.Text(window, height=5, wrap=tk.WORD, bg="white", relief="sunken", state=tk.DISABLED)
    result_text.pack(padx=25, pady=25, fill=tk.BOTH, expand=True)
    
    # Кнопка для копирования результата в буфер обмена
    copy_button = tk.Button(window, text="Копировать в буфер обмена", command=copy_to_clipboard)
    copy_button.pack(pady=10)
    
    # Запуск главного цикла Tkinter
    window.mainloop()


    Только через pip надо будет установить кое-что, возможно. Типа:
    pip install pyperclip

    Код декодирует русскоязычные папки в путях на сервере с MDaemon.
    Ответ написан
    Комментировать
  • Существует ли в PHPStorm плагин генерации CSS из HTML?

    guvijur
    @guvijur
    Практик, кинестетик, ретроград и консерватор
    Я пользуюсь Brackets и в нём такая фишка есть.
    Очень удобно, когда можно редактировать CSS прямо в выпадающем окне в коде html.
    В шторме не нашёл, но в принципе есть на сайте разработчика поддержка, можно у неё спросить.
    Ответ написан