Как мне преобразовать многие текстовые файлы из <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 ($ е);
}
?>