我正在尝试将 php 文件(client.php)从 utf-8 转换为 iso-8859-1,以下命令对文件没有任何作用:
iconv -f UTF-8 -t ISO-8859-1 client.php
执行后会显示原始文件内容。
事实上,当我在执行iconv后检查文件的编码时:
文件-I client.php
显示了相同的旧 utf-8:
client.php:文本/x-php;字符集=utf-8
iconv 实用程序应将文件中字符的编码从一种代码集转换为另一种,并将结果写入标准输出。
这是一个解决方案:将标准输出写入临时文件并重命名临时文件
iconv -f UTF-8 -t ISO_8859-1 client.php > client_temp.php && mv -f client_temp.php client.php
对于最低 128 个字符,ASCII、UTF-8 和 ISO-8859 是 100% 相同的编码。如果您的文件仅包含该范围内的字符(基本上是您在常见的美国英语键盘上找到的字符集),那么这些编码之间没有区别。
我猜发生了什么:纯文本文件没有关联的编码元数据。您无法仅通过查看纯文本文件来知道它的编码。该file
实用程序所做的只是给出其最佳猜测,并且由于没有区别,它更愿意告诉您该文件是 UTF-8 编码的,从技术上讲它很可能是。
除了带有以下 One-Liner 的 jackjr300 之外,您还可以对当前文件夹中的所有 php 文件执行此操作:
for filename in *.php; do iconv -f ISO_8859-1 -t UTF-8 $filename > temp_$filename && mv -f ./temp_$filename ./$filename; done