本文目錄一覽:
- 1、C語言fwrite寫入文件後為什麼出現亂碼?
- 2、為什麼結構體裏面的int型變量用fwrite寫入文件時顯示亂碼?
- 3、PHP寫入到文本文件亂碼
- 4、PHP讀取文件亂碼問題
- 5、fwrite保存數據,打開變亂碼
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碼顯示,兩者不兼容。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/237702.html