-
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 参数。例如:
- FILE *fp;
- int i, j;
- char *str, ch;
- fscanf(fp, "%d %s", &i, str);
- fprintf(fp,"%d %c", j, ch);
fprintf() 返回成功写入的字符的个数,失败则返回负数。fscanf() 返回参数列表中被成功赋值的参数个数。
【示例】用 fscanf 和 fprintf 函数来完成对学生信息的读写。- #include<stdio.h>
- #define N 2
- struct stu{
- char name[10];
- int num;
- int age;
- float score;
- } boya[N], boyb[N], *pa, *pb;
- int main(){
- FILE *fp;
- int i;
- pa=boya;
- pb=boyb;
- if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){
- printf("Cannot open file, press any key exit!");
- getch();
- exit(1);
- }
- //从键盘读入数据,保存到boya
- printf("Input data:\n");
- for(i=0; i<N; i++,pa++){
- scanf("%s %d %d %f", pa->name, &pa->num, &pa->age, &pa->score);
- }
- pa = boya;
- //将boya中的数据写入到文件
- for(i=0; i<N; i++,pa++){
- fprintf(fp,"%s %d %d %f\n", pa->name, pa->num, pa->age, pa->score);
- }
- //重置文件指针
- rewind(fp);
- //从文件中读取数据,保存到boyb
- for(i=0; i<N; i++,pb++){
- fscanf(fp, "%s %d %d %f\n", pb->name, &pb->num, &pb->age, &pb->score);
- }
- pb=boyb;
- //将boyb中的数据输出到显示器
- for(i=0; i<N; i++,pb++){
- printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);
- }
- fclose(fp);
- return 0;
- }
运行结果:
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 的作用相同。例如:- #include<stdio.h>
- int main(){
- int a, b, sum;
- fprintf(stdout, "Input two numbers: ");
- fscanf(stdin, "%d %d", &a, &b);
- sum = a + b;
- fprintf(stdout, "sum=%d\n", sum);
- return 0;
- }
运行结果:
Input two numbers: 10 20↙
sum=30 -
PHP fwrite写入文件,记事本打开乱码
2021-12-29 09:48:24写入文件的代码: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); }
-
fwrite写入文件乱码,使用fscanf() 和 fprintf() 函数实现
2020-05-13 23:32:58#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; }
-
C语言文件操作函数fwrite导致写入文件的内容乱码的问题解决方案
2022-02-28 16:01:20fwrite() 函数用来向文件中写入块数据,它的原型为: size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp ); 参数说明: ptr 为内存区块的指针,它可以是数组、变量、结构体等。fread() 中的 ptr ... -
C语言fwrite写入结构体乱码问题,每两个数据项之间有乱码
2020-06-24 17:03:06在最近我遇到了一个问题当我使用fwrite写数据进文件时,直接打开文件出现了乱码,以下是我的文档显示 我的输入是 清华大学 2020 32 这个时候我们发现每两个数据项之间都多了一些随机字符,虽然不影响读取数据,但是... -
fwrite写文件是乱码
2021-07-08 23:24:38fwrite写的二进制文件,所以我们打开所写的文件是乱码,但数据是正确的,我们通过fread函数按照原来的数据格式读取即可。 可以参考该文。 #include <sys/types.h> #include <sys/stat.h> #include &... -
关于fwrite写入文件后打开查看是乱码的问题
2020-04-22 11:10:05这是正常的,需要注意,这种细节也是自己真正自己去写了才体会得到。 -
文件操作fwrite写txt文件乱码怎么办,我这里有方法解决
2021-01-09 00:45:56总会有人不明白为什么写入的内容会乱码。 先引入一些知识; *文件有二进制文件,文本文件。 二进制文件是按内存写入的; 文本文件是按格式写入的;* 因此二进制文件用来写入一些不同类型的数据时 就容易出现 将下一... -
fwrite写入后,fread读出的有部分是乱码
2020-06-08 21:57:45题目:①创建一个文件FP,该文件包含n组结构体化的人员,每个人员的名称最多20个字符,以及一个整数以表示该人员的年龄(将其写为函数)。 ②在屏幕上输出所有元素,一行输出一个人的姓名年龄(将其写为函数) ```... -
fwrite乱码问题
2020-04-25 15:46:33fwrite写入文件是二进制代码形式,所以用文本打开为乱码,这时候我们可以用fprintf代替 fwrite效果: 乱码 fprintf效果: #include <stdio.h> #include <string.h> #include &l... -
Qt5写文件后出现乱码问题解决方法
2021-12-31 13:33:40在写入文件的时候使用的是toUtf8(),之前试过toLocal8Bit()或者toLatin1(),都不行,想着还是utf8的问题,所以改成这个就可以了,程序本身中文显示时正常的,也就是说系统中中文字库就没问题的txFileContent ... -
php fwrite写入文件bom头导致的乱码问题解决
2021-04-23 06:01:11最近导出文件遇到fwrite导出乱码,而且中英文都乱码,很费解。折腾了一番之后终于找到问题所在了,mark下。UTF-8 BOM 又叫 UTF-8 签名,其实 UTF-8 的 BOM 对 UFT-8 没有作用,是为了支援 UTF-16,UTF-32 才加上的 ... -
php写入txt乱码的解决方法
2021-01-02 18:07:34相信很多人在使用PHP的过程中都遇到过生成文件乱码的情况,不论是使用fwrite还是file_put_contents写入。可能你会先尝试从编码入手尝试解决,但最终的结果往往是不理想的,尽管我们都将其转换为了UTF-8编码了… 那么... -
PHP fopen中文文件名乱码问题解决方案
2021-04-13 14:43:25一般在php中会使用fopen进行生成文件,但是当文件名存在中文时保存文件会出现中文乱码。源代码: -
C语言文件写入结构体的乱码解决方法
2021-05-19 18:09:17C语言中用 fwrite 向文件写入结构体时出现乱码的解决方法,由于fwrite是用于二进制文件的,所以打开直接写入的文件是会出现乱码,这时需要一个中间文件来存储临时数据,就是先将数据存储在一个临时文件,然后从这个... -
C语言 文件写入输出。文件载入后输出是乱码,纠结啊!
2021-02-27 10:53:46该楼层疑似违规已被系统折叠隐藏此楼查看此楼void save1() //将工具的基本信息保存至文件:"工具基本信息.file"{FILE*fp; //定义fp是一个指向FILE类型数据的指针变量... -
c语言fwrite写入int问题,怎么解决?
2021-05-21 12:33:28c语言fwrite写入int问题,怎么解决?#includevoid aaa();struct student{char name[5]; //姓名int age; //年龄int num; //学号char addr[5]; //地址}stu[4];void main(){int i;printf("请输入4个学生姓名、年龄、... -
C语言将结构体数组数据写入到文件中以及从文件中分组读取不同类型的数据,以及解决fwrite造成的乱码问题
2019-11-11 19:00:16今天在给别人写程序的时候,遇到一个问题,将结构体数组的数据存到文件中,出现了乱码。 下面我写的程序: struct student { int num; //学号 char name[15]; //姓名 char sex[8]; //性别 char className... -
c语言文本写入结构体乱码
2022-03-09 09:14:35今天在做c语言系统类题时,用fwrite写入文件,打开文件发现乱码,百度尝试了几种办法都没解决。 -
用MATLAB将矩阵数据写入txt文件中,打开乱码原因
2016-05-01 12:28:15MATLAB将数据写入txt文件中乱码的原因,是将数据按照二进制文件写入txt文件,所以打开会出现乱码的情况,只需要把 fid1=fopen('piture.txt','w'); 换成,就可以了 fid1=fopen('piture.txt','wt'); ... -
fwrite结构体变量到文件输出乱码的解决办法
2019-09-13 12:00:08fwrite烫烫烫 在写学校的C语言作业时遇到了一些问题 作业要求统计学生姓名、学号、成绩...后来百度了一下发现是由于int类型的数据写入到文件里格式就会变成人眼中的乱码(电脑眼里还是一样的东西),于是我把int型... -
c语言,数据能写入文件,但是从文件读取数据的时候,出现了乱码,如下代码,求解答
2021-03-07 18:29:07//写入数据代码#include#defineSIZE2typedefstructstu1//学生信息表{charname[10];intnum;intage;charaddr[15];...//写入文件函数voidma...//写入数据代码#include#define SIZE 2typedef struct stu1 /... -
[Python学习]python写入中文到乱码的问题解决
2021-08-05 10:03:15用vscode打开文件并写入一首古诗的时候,在vscode里面打开文件时发现时乱码,右下角标注gushi.txt也是utf-8. 但是在文件夹里打开的时候是正常的 file1 = open("gushi.txt","w") file1.write(""" 风 解落三千叶,能... -
MATLAB在文件中写入中文乱码的解决方法
2021-04-07 10:31:17MATLAB fprintf在命令行输出中文没问题,但在csv中写入中文时csv中汉字显示乱码,如图(图来自网络): 原因:MATLAB默认编码格式是UTF-8,与中文格式兼容有问题 解决: 1、如要使用fprintf写数据,则在fopen时...