您的位置:

phpfwrite乱码,PHP中文乱码

本文目录一览:

C语言fwrite写入文件后为什么出现乱码?

这个函数以二进制形式对文件进行操作。

按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为乱码。例如float a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。

写入数据用fprintf(fp,"%s %s %d 这种方式。不是 fscanf(), 另,注意写出时的格式里要有分隔符空格,否则下次读文件时shu,字符串,数字混在一起无法读。允许同时“读写”的文件,要注意读写位置的控制,必要时用到 回绕文件,或fseek。

扩展资料:

返回实际写入的数据项个数count。

说明:这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。

fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。

参考资料来源:百度百科-fwrite

为什么结构体里面的int型变量用fwrite写入文件时显示乱码?

乱码才是对的。

你用的是二进制形式打开的文件,int类型占用4字节,你的代码就是把这4字节写入了文件。

相当于就是说你的int比如是0x12345678,写入文件的内容会是 78 56 34 12 (注意,我说的是十六进制码),它不是可读的字符串。你需要的是将int转换为字符串再写入。

PHP写入到文本文件乱码

php处理中文编码老是有问题,这是编码的问题,可以将txt文件另存为UTF-8的编码再处理;

参考如下:

function file_utf8($filepath){

    $f_contents= file_get_contents($filepath);

    

    $encoding = mb_detect_encoding($f_contents, array('GB2312','GBK','UTF-16','UCS-2','UTF-8','BIG5','ASCII'));

    $content_u="";

    $handle=fopen($filepath,"r");

    if ($handle){

        while (!feof($handle)) {

            $buffer= fgets($handle);

            if ($encoding != false) {

                if (mb_detect_encoding($buffer)!='UTF-8'){

                    $buffer = iconv($encoding, 'UTF-8', $buffer);

                }

            }else{

                    $buffer = mb_convert_encoding ( $buffer, 'UTF-8','Unicode');

            }

            $content_u.=$buffer;

        }

        fclose($handle);

        return $info=array('status'=1,'message'=$content_u);

    }else{

        return $info=array('status'=0,'message'='打开文件失败');

    }

}

PHP读取文件乱码问题

1.fgetc($fp) 取得是单字节的,中文可能的根据编码可能有2 3 4字节,所以不管怎么输出肯定都会是乱码。

解决方法

1.修改php文件的编码为utf-8, 只有这样保存到test.txt文件里的文件才会是utf-8 大部分中文就都是按照3个字节

2.$fp=fopen($filename,"r");

while(($char=fread($fp,3))!==''){

printf("%d.%s",ftell($fp)/3,$char);

}

fwrite保存数据,打开变乱码

你说的打开变乱码是什么意思?是指用文本方式打开“d:\\st.txt”这个文件吗?如果是这个问题那就对了,本来就该是乱码,因为fwrite在写入的时候是采用整字节的二进制写入,而文本编辑器采用的是asc码显示,两者不兼容。