Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php编写一个编码为UTF-8的文件_Php_Utf 8 - Fatal编程技术网

用php编写一个编码为UTF-8的文件

用php编写一个编码为UTF-8的文件,php,utf-8,Php,Utf 8,p.S.:这不是一个重复的问题,因为我不希望在文件中写入内容,因为已经完成了,我希望将文件类型更改为UTF-8,这是有区别的。 如何生成UTF-8文件而不是ANSI文件。(不是内容) 例如,most IDE有一个选项编码,您可以修改文件的类型,但我正在从数据库生成一个大容量文件,它生成许多单独的文本文件,但整个文件都是ANSI默认文件。。我只是在寻找php中的一个函数,它可以在生成批量之前更改编码 如果源代码有帮助,我可以在这里发布。请告诉我 提前谢谢 已编辑 按照我的要求来做 当我生成文件“

p.S.:这不是一个重复的问题,因为我不希望在文件中写入内容,因为已经完成了,我希望将文件类型更改为UTF-8,这是有区别的。

如何生成UTF-8文件而不是ANSI文件。(不是内容)

例如,most IDE有一个选项编码,您可以修改文件的类型,但我正在从数据库生成一个大容量文件,它生成许多单独的文本文件,但整个文件都是ANSI默认文件。。我只是在寻找php中的一个函数,它可以在生成批量之前更改编码

如果源代码有帮助,我可以在这里发布。请告诉我

提前谢谢

已编辑

按照我的要求来做


当我生成文件“testecli01.csv”时,它总是得到编码ANSI,无论我在脚本中做什么,它总是ANSI,我需要UTF-8,就是这样。很简单,但我不知道怎么做

我不知道有哪个数据库可以轻松地为您进行编码转换。例如,在MySQL中,必须重置数据库、表和列的所有字符编码,然后转换数据

我建议您创建数据库转储并使用
iconv
更改编码,无论是在命令行上:

iconv -f original_charset -t utf-8 dumpTextData > convertedTextData
或使用PHP(摘自)


注意:编辑以避免泄漏文件描述符。

我不知道有哪个数据库可以方便地进行编码转换。例如,在MySQL中,必须重置数据库、表和列的所有字符编码,然后转换数据

我建议您创建数据库转储并使用
iconv
更改编码,无论是在命令行上:

iconv -f original_charset -t utf-8 dumpTextData > convertedTextData
或使用PHP(摘自)

注意:编辑以避免泄漏文件描述符。

如果您的第三方程序如您在评论中所述“不支持ANSI格式的文件,但支持UTF-8”,则很可能需要一个新的文件描述符

虽然Unicode标准允许在UTF-8中使用BOM,但[2]不允许 需要或推荐[3]字节顺序在UTF-8[4]中没有意义,因此 BOM仅用于将文本流或文件标识为UTF-8

原因 建议使用BOM,因为它不符合ASCII 背面兼容性是UTF-8设计的一部分

因此,严格来说,您的第三方程序并不完全符合标准,因为BOM应该是可选的。ANSI是100%有效的UTF-8,这是它的主要驱动因素之一。根据定义,任何能理解UTF-8标准的东西也能理解ANSI

请尝试将
“\xEF\xBB\xBF”
写入文件的前面,看看这是否解决了您的问题。

如果您的第三方程序如您在评论中所述“不支持ANSI格式的文件,但支持UTF-8格式的文件”,则很可能会出现错误

虽然Unicode标准允许在UTF-8中使用BOM,但[2]不允许 需要或推荐[3]字节顺序在UTF-8[4]中没有意义,因此 BOM仅用于将文本流或文件标识为UTF-8

原因 建议使用BOM,因为它不符合ASCII 背面兼容性是UTF-8设计的一部分

因此,严格来说,您的第三方程序并不完全符合标准,因为BOM应该是可选的。ANSI是100%有效的UTF-8,这是它的主要驱动因素之一。根据定义,任何能理解UTF-8标准的东西也能理解ANSI


尝试将
“\xEF\xBB\xBF”
写入文件的前面,看看这是否解决了您的问题。

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');

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');

旧的编码是第一位的,就像在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);

旧的编码是第一位的,就像在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);

除了从数据库生成文件之外,这个问题与您的问题完全一致。改变文件的编码没有什么神奇的作用,你必须先读它,改变编码,然后再写回去。上面的评论是正确的。没有神奇的数据库编码转换免费午餐。这不是同一个问题,这是关于文件本身,而不是文件的内容。是一件让我抓狂的事。。没有好的资源,甚至php文档本身。。我可以手工做,但我有上千个文件。。。0_o@Fernando,文本文件没有“encoding”属性。对于UTF-8来说,最接近这一点的是文件开头的BOM标记。但即使这样,您仍然必须将文件内容转换为UTF-8:仅输入BOM并不能解决任何问题,除非文件中没有特殊字符,在这种情况下,这些字符从一开始就是有效的UTF-8。
notebad++
在转换文件编码方面对我很有吸引力。免费下载,除了你是从数据库生成文件外,这个问题与你的问题完全吻合。改变文件的编码没有什么神奇的作用,你必须先读它,改变编码,然后再写回去。上面的评论是正确的。没有神奇的数据库编码转换免费午餐。这不是同一个问题,这是关于文件本身,而不是文件的内容。是一件让我抓狂的事。。没有好的资源,甚至php文档本身。。我可以手工做,但我有上千个文件。。。0_o@Fernando,文本文件没有“encoding”属性。对于UTF-8来说,最接近这一点的是文件开头的BOM标记。但即便如此,您仍然必须将文件内容转换为UTF-8:仅仅加入BOM并不能解决任何问题