【发布时间】:2011-10-13 10:50:28
【问题描述】:
我试图这样做: file_put_contents ($file_name, utf8_encode($data)) ; 但是当我使用 linux 命令从 shell 检查文件编码时:'file file_name' 我得到:'file_name:ASCII 文本'
这是否意味着 utf8_encoding 不起作用?如果是这样,从 ASCII 转换为 UTF8 的正确方法是什么
【问题讨论】:
我试图这样做: file_put_contents ($file_name, utf8_encode($data)) ; 但是当我使用 linux 命令从 shell 检查文件编码时:'file file_name' 我得到:'file_name:ASCII 文本'
这是否意味着 utf8_encoding 不起作用?如果是这样,从 ASCII 转换为 UTF8 的正确方法是什么
【问题讨论】:
试试这个:
$data = mb_convert_encoding($data, 'UTF-8', 'ASCII');
file_put_contents ( $file_name, $data );
或使用它来更改文件编码:
$fd = fopen($file, 'r');
stream_filter_append($fd, 'convert.iconv.UTF-8/ASCII');
stream_copy_to_stream($fd, fopen($output, 'w'));
【讨论】:
ASCII 是 UTF-8 的子集,所以如果一个文档是 ASCII,那么它已经是 UTF-8
【讨论】:
请注意,utf8_encode 只转换编码为 ISO-8859-1 到 UTF-8。一个更合适的名字是 “iso88591_to_utf8”。如果您的文本未以 ISO-8859-1 编码,则可以 不需要这个功能。如果您的文本已经是 UTF-8,您不需要 需要这个功能。事实上,将此函数应用于文本 未在 ISO-8859-1 中编码的文本很可能只会出现乱码。
如果您需要将文本从任何编码转换为任何其他编码, 改为查看 iconv()。
【讨论】:
如果您的字符串不包含任何非 ASCII 字符,那么您可能不会看到差异,因为 UTF-8 向后兼容 ASCII。例如,试着写下文本“1000 さくら”,看看会发生什么。
【讨论】:
file 工具将 UTF-8 中的纯 ASCII 字符检测为 ASCII。