PS:这不是一个重复的问题,因为我不打算在文件中写内容,因为它已经完成了,我想要将文件类型更改为UTF-8,它有所不同。
如何生成UTF-8文件而不是ANSI。 (不是内容)。
例如,大多数IDE都有一个选项编码,您可以在其中修改文件的类型,但我正在从我的数据库生成批量,并且它会生成大量单独的文本文件,但整体文件是ANSI默认的..我只是在php中寻找一个函数,可以在生成批量之前更改编码。
如果源代码有帮助,我可以在这里发布。请告诉我。
提前致谢。
EDITED
按照我在这里要求的印刷品。
当我生成文件“testecli01.csv”时,它总是得到ANSI编码,无论我在脚本中做什么,它总是ANSI,我需要UTF-8,就这样。很简单,但我不知道该怎么做。
答案 0 :(得分:4)
如果您的第三方程序“不支持ANSI中的文件但UTF-8”,正如您在评论中提到的那样,很可能它会期待BOM。
虽然Unicode标准确实允许使用UTF-8的BOM,[2]却没有 要求或推荐它。[3]字节顺序在UTF-8中没有意义[4]所以a BOM仅用于将文本流或文件标识为UTF-8。
原因 建议不要使用BOM,因为它会破坏ASCII 反向兼容性是UTF-8设计的一部分。
严格来说,您的第三方程序并不完全符合标准,因为BOM应该是可选的。 ANSI是100%有效的UTF-8,这是它的主要驱动因素之一。根据定义,任何能够理解UTF-8符合标准的东西也理解ANSI。
尝试将"\xEF\xBB\xBF"
写入文件的前面,看看是否能解决您的问题。
答案 1 :(得分:1)
我不知道哪个数据库可以轻松地为您进行编码转换。例如,在MySQL中,您必须重置db,tables和columns的所有字符编码,然后转换数据。
我建议您创建数据库转储并使用iconv
更改编码,无论是在命令行上:
iconv -f original_charset -t utf-8 dumpTextData > convertedTextData
或PHP(取自How to write file in UTF-8 format?)
$input = fopen($file, 'r');
$output = fopen($file, 'w');
stream_filter_append($input, 'convert.iconv.UTF-8/OLD-ENCODING');
stream_copy_to_stream($input, $output);
fclose($input);
fclose($output);
注意:编辑以避免泄露文件描述符。
答案 2 :(得分:0)
Excel喜欢CSV文件为UTF-16LE
,并以“\xFF\xFE
”开头。
我为excel构建文件的代码是:
echo "\xFF\xFE"; // marker for UTF-16 file;
foreach ($rows as $row)
echo mb_convert_encoding($row, 'UTF-16LE');
答案 3 :(得分:0)
旧编码是第一个,就像在iconv函数中一样。 您也无法读取和写入相同的文件。
$input = fopen($path, 'r');
$output = fopen($path . '.tmp', 'w');
stream_filter_append($input, 'convert.iconv.OLDENCODING/UTF-8');
stream_copy_to_stream($input, $output);
fclose($input);
fclose($output);
unlink($path);
rename($path . '.tmp', $path);