精华内容
下载资源
问答
  • 如何解决PHP用fwrite写入文件中文乱码的问题
    2021-03-24 12:41:34

    如何解决PHP用fwrite写入文件中文乱码的问题

    发布时间:2020-07-15 13:52:07

    来源:亿速云

    阅读:220

    作者:Leah

    这期内容当中小编将会给大家带来有关如何解决PHP用fwrite写入文件中文乱码的问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP用fwrite写入文件中文乱码的解决办法:1、用【mb_detect_encoding()】函数获取内容编码方式;2、用【mb_convert_encoding()】函数将内容编码方式转换为【UTF-8】即可。

    PHP用fwrite写入文件中文乱码的解决办法:

    PHP用fwrite或file_put_contents写入文件内容中文乱码,许多人说PHP脚本编码方式是UTF-8,创建的文件就是UTF-8,然而事实不是这样。

    解决方法很简单:fwrite($fp, mb_convert_encoding( $content, 'UTF-8', mb_detect_encoding($content) ) );

    用mb_detect_encoding()函数获取内容编码方式,用mb_convert_encoding()函数将内容编码方式转换为UTF-8。

    上述就是小编为大家分享的如何解决PHP用fwrite写入文件中文乱码的问题了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

    更多相关内容
  • fwrite写入文件乱码问题

    万次阅读 2018-09-05 15:07:49
    参考下面这篇文章(使用fprintf写入文件) http://c.biancheng.net/cpp/html/2936.html 使用fprintf 和 fscanf 代替 fwrite fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化...

    参考下面这篇文章(使用fprintf写入文件)

    http://c.biancheng.net/cpp/html/2936.html

    使用fprintf 和 fscanf 代替 fwrite

    fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是键盘和显示器,而是磁盘文件。

    这两个函数的原型为:

    int fscanf ( FILE *fp, char * format, ... );
    int fprintf ( FILE *fp, char * format, ... );

    fp 为文件指针,format 为格式控制字符串,... 表示参数列表。与 scanf() 和 printf() 相比,它们仅仅多了一个 fp 参数。例如:

     
    1. FILE *fp;
    2. int i, j;
    3. char *str, ch;
    4. fscanf(fp, "%d %s", &i, str);
    5. fprintf(fp,"%d %c", j, ch);

    fprintf() 返回成功写入的字符的个数,失败则返回负数。fscanf() 返回参数列表中被成功赋值的参数个数。

    【示例】用 fscanf 和 fprintf 函数来完成对学生信息的读写。

     
    1. #include<stdio.h>
    2.  
    3. #define N 2
    4.  
    5. struct stu{
    6. char name[10];
    7. int num;
    8. int age;
    9. float score;
    10. } boya[N], boyb[N], *pa, *pb;
    11.  
    12. int main(){
    13. FILE *fp;
    14. int i;
    15. pa=boya;
    16. pb=boyb;
    17. if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){
    18. printf("Cannot open file, press any key exit!");
    19. getch();
    20. exit(1);
    21. }
    22.  
    23. //从键盘读入数据,保存到boya
    24. printf("Input data:\n");
    25. for(i=0; i<N; i++,pa++){
    26. scanf("%s %d %d %f", pa->name, &pa->num, &pa->age, &pa->score);
    27. }
    28. pa = boya;
    29. //将boya中的数据写入到文件
    30. for(i=0; i<N; i++,pa++){
    31. fprintf(fp,"%s %d %d %f\n", pa->name, pa->num, pa->age, pa->score);
    32. }
    33. //重置文件指针
    34. rewind(fp);
    35. //从文件中读取数据,保存到boyb
    36. for(i=0; i<N; i++,pb++){
    37. fscanf(fp, "%s %d %d %f\n", pb->name, &pb->num, &pb->age, &pb->score);
    38. }
    39. pb=boyb;
    40. //将boyb中的数据输出到显示器
    41. for(i=0; i<N; i++,pb++){
    42. printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);
    43. }
    44.  
    45. fclose(fp);
    46. return 0;
    47. }

    运行结果:

    Input data:
    Tom 2 15 90.5↙
    Hua 1 14 99↙
    Tom  2  15  90.500000
    Hua  1  14  99.000000

    打开 D:\\demo.txt,发现文件的内容是可以阅读的,格式非常清晰。用 fprintf() 和 fscanf() 函数读写配置文件、日志文件会非常方便,不但程序能够识别,用户也可以看懂,可以手动修改。

    如果将 fp 设置为 stdin,那么 fscanf() 函数将会从键盘读取数据,与 scanf 的作用相同;设置为 stdout,那么 fprintf() 函数将会向显示器输出内容,与 printf 的作用相同。例如:

     
    1. #include<stdio.h>
    2. int main(){
    3. int a, b, sum;
    4. fprintf(stdout, "Input two numbers: ");
    5. fscanf(stdin, "%d %d", &a, &b);
    6. sum = a + b;
    7. fprintf(stdout, "sum=%d\n", sum);
    8. return 0;
    9. }

    运行结果:
    Input two numbers: 10 20↙
    sum=30

     

    展开全文
  • 写入文件的代码:fwrite($filePath, $data); 同事电脑的记事本默认编码是ANSI,打开文件中文显示乱码 我电脑的记事本默认编码是UTF-8,打开文件中文显示正常 WPS打开文件中文显示正常,Microsoft office打开文件...

    问题

    写入文件的代码:fwrite($filePath, $data);

    同事电脑的记事本默认编码是ANSI,打开文件中文显示乱码

    我电脑的记事本默认编码是UTF-8,打开文件中文显示正常

    WPS打开文件中文显示正常,Microsoft office打开文件中文乱码

    解决方案

    方案一:写入内容之前先写入BOM

    fwrite($filePath, chr(0xEF).chr(0xBB).chr(0xBF));
    fwrite($filePath, $data);
    
    //或者
    
    fwrite($filePath, chr(0xEF).chr(0xBB).chr(0xBF).$data);

    根本原因请阅读:当文件没有BOM时,打开文件可能是乱码的原因

    根本原因总结:写入文件时没有加BOM,有可能识别不出来编码方式是UTF-8,就会出现乱码

    方案二:mb_convert_encoding()获取内容编码方式,mb_detect_encoding()把编码方式转为gbk。

    网上说把编码方式转为UTF-8可行,试了还是会出现以上问题,不行的原因应该是方案一说的缺少BOM头

    fwrite($filePath, mb_convert_encoding($data, 'gbk', mb_detect_encoding($data)));

    为何转码为gbk可行的根本原因暂时没时间找了,以后再补充。知道的朋友可以留言一下

    file_put_contents

    如果是使用file_put_contents写入文件碰到乱码问题,解决方法相同

    方案一:

    file_put_contents($filePath,  chr(0xEF).chr(0xBB).chr(0xBF));
    file_put_contents($filePath, $data);
    
    //或者
    
    file_put_contents($filePath, chr(0xEF).chr(0xBB).chr(0xBF).$data);

    方案二:

    file_put_contents($filePath, mb_convert_encoding($data, 'gbk', mb_detect_encoding($data)));

    fputcsv

    function write_to_csv($filePath, $list){
            $fp = fopen($filePath, 'w');
    
            fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));
    
            foreach ($list as $fields) {
                fputcsv($fp, $fields);
            }
    
            fclose($fp);
    }

    展开全文
  • #include <stdio.h> #include <stdlib.h> int main() { long buffer[]={1000,2000,3000,4000,5000,6000,7000}; long RCV[10]; //接收数组 FILE *fp;...//统计写入的数据块 int RCV_num
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    
        long buffer[]={1000,2000,3000,4000,5000,6000,7000};
        long RCV[10]; //接收数组 
    	 
        FILE *fp;
        long *fpos = buffer;
        long *RCV_pos = RCV;
        int num = 0;//统计写入的数据块
        int RCV_num = 0;
        int nn = 0;//写入时返回的数据块
        int n = sizeof(buffer)/sizeof(long);
        int a = 0,b = 0;
        
        // wb+ 读写方式打开或建立一个二进制文件,允许读和写
        if ((fp=fopen("D:\\Users\\ASUS\\Desktop\\asd.txt","w+"))==NULL)
        {
            printf("%s\n","can not open file");
            exit(0);
        }
    
    
        while(n--)
        {
    		printf("position = %d\t",ftell(fp) );
    		printf("buffer[i] = %d\t",*fpos );//buffer 中数据的地址,每个四位 
    		printf("fpos = %d\n",fpos );    //输出数组中参数的位置 
    		//nn=fwrite(fpos,sizeof(long),1,fp); //写入文件 
    		fprintf(fp,"%d \n",buffer[a] ); 
    		fpos=fpos + 1;   //指针位置 +1
    		//num = num + nn;
    		a++;
        	num = num + 1;
    
        }
        printf("after write in the file,the ptr's position = %d\t",ftell(fp) );
        printf("number of information write = %d\n\n\n",num );
     
     	//start read file   
    	rewind(fp);//返回文件首位 
        while(!feof(fp))/*判断是否结束,这里会有个文件结束符*/
        {
    		 //fread(RCV_pos,sizeof(long),1,fp);
    		 fscanf(fp,"%d \n",&RCV[b]);
    		 b++;
    		 RCV_num++;
    		 RCV_pos++;
        }      
        for( int i = 0; i < RCV_num-1; i++)
        {
            //printf("%d\n",*(RCV_pos-RCV_num + i)); //fpos 存的是buffer地址 
            printf("%d\n",RCV[i]); 
        }   
        
        return 0;
    }
    
    
    展开全文
  • fwrite() 函数用来向文件写入块数据,它的原型为: size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp ); 参数说明: ptr 为内存区块的指针,它可以是数组、变量、结构体等。fread() 中的 ptr ...
  • 在最近我遇到了一个问题当我使用fwrite写数据进文件时,直接打开文件出现了乱码,以下是我的文档显示 我的输入是 清华大学 2020 32 这个时候我们发现每两个数据项之间都多了一些随机字符,虽然不影响读取数据,但是...
  • fwrite文件乱码

    千次阅读 2021-07-08 23:24:38
    fwrite写的二进制文件,所以我们打开所写的文件乱码,但数据是正确的,我们通过fread函数按照原来的数据格式读取即可。 可以参考该文。 #include <sys/types.h> #include <sys/stat.h> #include &...
  • 这是正常的,需要注意,这种细节也是自己真正自己去写了才体会得到。
  • 总会有人不明白为什么写入的内容会乱码。 先引入一些知识; *文件有二进制文件,文本文件。 二进制文件是按内存写入的; 文本文件是按格式写入的;* 因此二进制文件用来写入一些不同类型的数据时 就容易出现 将下一...
  • 题目:①创建一个文件FP,该文件包含n组结构体化的人员,每个人员的名称最多20个字符,以及一个整数以表示该人员的年龄(将其写为函数)。 ②在屏幕上输出所有元素,一行输出一个人的姓名年龄(将其写为函数) ```...
  • fwrite乱码问题

    千次阅读 2020-04-25 15:46:33
    fwrite写入文件是二进制代码形式,所以用文本打开为乱码,这时候我们可以用fprintf代替 fwrite效果: 乱码 fprintf效果: #include <stdio.h> #include <string.h> #include &l...
  • 写入文件的时候使用的是toUtf8(),之前试过toLocal8Bit()或者toLatin1(),都不行,想着还是utf8的问题,所以改成这个就可以了,程序本身中文显示时正常的,也就是说系统中中文字库就没问题的txFileContent ...
  • 最近导出文件遇到fwrite导出乱码,而且中英文都乱码,很费解。折腾了一番之后终于找到问题所在了,mark下。UTF-8 BOM 又叫 UTF-8 签名,其实 UTF-8 的 BOM 对 UFT-8 没有作用,是为了支援 UTF-16,UTF-32 才加上的 ...
  • 相信很多人在使用PHP的过程中都遇到过生成文件乱码的情况,不论是使用fwrite还是file_put_contents写入。可能你会先尝试从编码入手尝试解决,但最终的结果往往是不理想的,尽管我们都将其转换为了UTF-8编码了… 那么...
  • 一般在php中会使用fopen进行生成文件,但是当文件名存在中文时保存文件会出现中文乱码。源代码:
  • C语言中用 fwrite文件写入结构体时出现乱码的解决方法,由于fwrite是用于二进制文件的,所以打开直接写入文件是会出现乱码,这时需要一个中间文件来存储临时数据,就是先将数据存储在一个临时文件,然后从这个...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼void save1() //将工具的基本信息保存至文件:"工具基本信息.file"{FILE*fp; //定义fp是一个指向FILE类型数据的指针变量...
  • c语言fwrite写入int问题,怎么解决?#includevoid aaa();struct student{char name[5]; //姓名int age; //年龄int num; //学号char addr[5]; //地址}stu[4];void main(){int i;printf("请输入4个学生姓名、年龄、...
  • 今天在给别人写程序的时候,遇到一个问题,将结构体数组的数据存到文件中,出现了乱码。 下面我写的程序: struct student { int num; //学号 char name[15]; //姓名 char sex[8]; //性别 char className...
  • 今天在做c语言系统类题时,用fwrite写入文件,打开文件发现乱码,百度尝试了几种办法都没解决。
  • MATLAB将数据写入txt文件乱码的原因,是将数据按照二进制文件写入txt文件,所以打开会出现乱码的情况,只需要把 fid1=fopen('piture.txt','w'); 换成,就可以了 fid1=fopen('piture.txt','wt'); ...
  • fwrite结构体变量到文件输出乱码的解决办法

    千次阅读 多人点赞 2019-09-13 12:00:08
    fwrite烫烫烫 在写学校的C语言作业时遇到了一些问题 作业要求统计学生姓名、学号、成绩...后来百度了一下发现是由于int类型的数据写入文件里格式就会变成人眼中的乱码(电脑眼里还是一样的东西),于是我把int型...
  • //写入数据代码#include#defineSIZE2typedefstructstu1//学生信息表{charname[10];intnum;intage;charaddr[15];...//写入文件函数voidma...//写入数据代码#include#define SIZE 2typedef struct stu1 /...
  • 用vscode打开文件写入一首古诗的时候,在vscode里面打开文件时发现时乱码,右下角标注gushi.txt也是utf-8. 但是在文件夹里打开的时候是正常的 file1 = open("gushi.txt","w") file1.write(""" 风 解落三千叶,能...
  • MATLAB fprintf在命令行输出中文没问题,但在csv中写入中文时csv中汉字显示乱码,如图(图来自网络): 原因:MATLAB默认编码格式是UTF-8,与中文格式兼容有问题 解决: 1、如要使用fprintf写数据,则在fopen时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,147
精华内容 858
关键字:

fwrite写入文件乱码