我想将大量文本文件 (40+) 从 ISO-Latin-1 转换为 UTF8-no-bom。我该如何实现?
答案1
从堆栈溢出:
您可以从 GnuWin32 获取 iconv 之类的工具, 运行批处理脚本来以这种方式处理所有文件。 但是它们现在是什么编码?如果是 ANSI, 并且您没有使用任何值为 => 128 的字节, 那么它们已经是无BOM的UTF-8了。 也许你可以用它来缩小 你需要处理的文件——可能你只有一个 需要转换的文件很少(并且可能更愿意单独进行转换)。
实际上,我是使用 Notepad++ 来完成的。 在尝试此操作之前,您必须备份您的文件。 您需要创建一个执行此操作的宏:
- 将当前打开的文件转换为UTF-8 w/o BOM;
- 选择文件中的所有文本,然后复制 (为什么?这看起来像是一个错误。如果你不这样做, 您的文件将被替换为您当前的剪贴板内容...);
- 保存当前文件;
- 关闭当前文件。
- 保存此宏。
PHP文件,然后使用“运行多个宏”运行它 次...”命令。如果你打开了 100 个文件,就让它运行 100 次。
答案2
<?php $url = getenv("服务器地址"); //$url = 获取环境 (HTTP_POST_VARS); $rootdir='d:\\xampp\\htdocs\\ecoder'; $目录="。"; $文件=scan_dir($rootdir); foreach ($files 作为 $file) { $信息 = 路径信息($文件); $extF =$info["扩展名"]; 如果 ($extF == "php" || $extF == "txt" || $extF == "js" || $extF == "css") { 回显$file。“
”; $数据 = file_get_contents($文件); 写入UTF8文件($文件,$数据); echo $file.' 被转换为 UTF8
'; } } //使用此函数获取目录内的所有文件(包括子目录) 函数 scan_dir($dir) { $arr文件 = 数组(); 如果(is_dir($dir)){ 如果 ($handle = opendir($dir)) { 更改目录($dir); while (false !== ($file = readdir($handle))) { 如果 ($file != "." && $file != "..") { 如果(is_dir($file)){ $arr = scan_Dir($文件); foreach ($arr 作为 $value) { $arrfiles[] = $dir."/".$value; } } 别的 { $arrfiles[] = $dir."/".$file; } } } 更改目录(“../”); } closedir($handle); } 返回$arrfiles; } function writeUTF8File($filename,$content) { //将文件转换为 UTF8 $f=fopen($文件名,"w"); # 现在 UTF-8 - 添加字节顺序标记 fwrite($f,pack("CCC",0xef,0xbb,0xbf)); fwrite($f,$内容); fclose($f); } >