Как мне преобразовать многие текстовые файлы из <some_encoding> в utf8-no-bom?
Я хочу конвертировать много текстовых файлов (40+) из ISO-Latin-1 в UTF8-no-bom. Как я могу сделать это?
2 ответа
Решение
Из stackoverflow:
Вы можете получить такой инструмент, как iconv от GnuWin32 и запустите пакетный скрипт для обработки всех ваших файлов таким способом. Но что они за кодировка сейчас? Если они ANSI, и вы не используете байты со значениями => 128, тогда они уже без спецификации UTF-8. Возможно, вы можете использовать это, чтобы сузить число файлы, которые вы должны обработать - может быть, достаточно, чтобы у вас был только несколько файлов для преобразования (и может предпочесть сделать это на индивидуальной основе).
На самом деле, я делаю это с помощью Notepad++. Прежде чем пытаться это сделать, вы должны сделать резервную копию ваших файлов. Вам нужно создать макрос, который делает это:
- Конвертировать текущий открытый файл в UTF-8 без спецификации;
- Выделите весь текст в вашем файле и скопируйте его (почему? Это похоже на ошибку. Если вы этого не сделаете, ваш файл будет заменен вашим текущим содержимым буфера обмена...);
- Сохранить текущий файл;
- Закройте текущий файл.
- Сохраните этот макрос.
PHP-файлы и запустите их с помощью команды "Запуск макроса несколько раз...". Если вы открыли 100 файлов, дайте ему поработать 100 раз.
<? PHP $ url = getenv ("SERVER_ADDR"); // $ url = getenv (HTTP_POST_VARS); $ RootDir = 'd: \\ XAMPP \\ HTDOCS \\ ecoder'; $ Реж = ""; $ файлов = scan_dir ($ RootDir); foreach ($ files as $ file) { $ info = pathinfo ($ file); $ extF = $ info ["extension"]; if ($ extF == "php" || $ extF == "txt" || $ extF == "js" || $ extF == "css") { echo $ file. "
"; $ data = file_get_contents ($ file); writeUTF8File ($ file, $ data); echo $ file. ' был преобразован в UTF8
"; } } // использовать эту функцию, чтобы получить все файлы в каталоге (включая подкаталоги) function scan_dir ($ dir) { $ arrfiles = array (); if (is_dir ($ dir)) { if ($ handle = opendir ($ dir)) { ChDir ($ реж); while (false! == ($ file = readdir ($ handle))) { if ($ file! = "." && $ file! = "..") { if (is_dir ($ file)) { $ arr = scan_Dir ($ file); foreach ($ arr как $ value) { $ arrfiles [] = $ dir. "/". $ value; } } еще { $ arrfiles [] = $ dir. "/". $ file; } } } ChDir ( "../"); } closedir ($ ручка); } вернуть $ arrfiles; } функция writeUTF8File ($ filename, $ content) {// บันทึก ไฟล์ เป็น UTF8 $ F = FOPEN ($ имя_файла, "ш"); # Теперь UTF-8 - Добавить метку порядка байтов fwrite ($ f, pack ("CCC", 0xef, 0xbb, 0xbf)); FWRITE ($ е, $ содержание); fclose ($ е); } ?>