作者 主題: [請益] fwrite寫成txt檔案需要指定編碼嗎  (閱讀 16009 次)

0 會員 與 1 訪客 正在閱讀本文。

danielkimo

  • 憂鬱的高中生
  • ***
  • 文章數: 120
    • 檢視個人資料
若資料庫的編碼是uft8
從資料庫把資料讀出來並fwrite到記事本
應該也是utf8的編碼吧
可是為什麼我用word打開
他卻一直問我要不要轉成utf8的編碼不然就不能開啟檔案
謝謝

liteC

  • 憂鬱的高中生
  • ***
  • 文章數: 158
    • 檢視個人資料
    • 軟體
不須要指定編碼

用記事本打開會問你這個問題是因為你存UTF-8但檔頭沒有Unicode BOM註記
記式本無法辨認

建議你用 emeditor 之類較好的文字編輯器會比較好工作
非常謝謝學長們熱心回答我發問的問題
非常感寫 m(_ _)m

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
最開頭要寫入 BOM 字元.
支援的軟體會依據開始的三個 BOM 字元來決定是用那一種編碼.
不過不支援的就會在一開始多出那三個字元的亂碼.

danielkimo

  • 憂鬱的高中生
  • ***
  • 文章數: 120
    • 檢視個人資料
但是我是要把產生好的txt檔餵給某支程式去跑
但是那隻程式一定要讀utf8的txt檔
這樣我不就還是要手動去改編馬
沒有辦法讓他從資料庫讀取資料寫成txt檔就是utf8嗎
不然這樣就失去自動的意義了
謝謝

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
Micro Soft 的Office 對 utf-8 的支援不是很好
應該是說你一定要告訴它編碼才會用 utf-8開
--
我用 2003,2000 是這樣的,openoffice 就不會(以 utf-8 的 csv ooo 直接開不會亂碼XP)
« 上次編輯: 2009-03-21 10:12 由 micmic3 »

danielkimo

  • 憂鬱的高中生
  • ***
  • 文章數: 120
    • 檢視個人資料
那要怎樣在php在fwrite資料庫內的資料到txt就順便加入BOM呢

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
自動? 用 word 去開來自動? 用 vba 去做?

如果是自己寫的程式來自動處理, 那又何必管 BOM 呢? 只要讀進來當做是 UTF-8 的文字不就好了? 還是你的檔案會有不是 UTF-8 的混雜在一起? 如果你的程式不知道 BOM 是什麼, 那不就讀進來反而多出來那幾個字元了呢?

BOM ... google 去找一下是那幾個字元吧, 開檔後就寫進去不就有了?

liteC

  • 憂鬱的高中生
  • ***
  • 文章數: 158
    • 檢視個人資料
    • 軟體
就和您說了不需要指定編碼
既然存進的文字是UTF-8
再讀出來當然也是UTF-8
何不自己實驗看看就知道?


但是我是要把產生好的txt檔餵給某支程式去跑
但是那隻程式一定要讀utf8的txt檔
這樣我不就還是要手動去改編馬
沒有辦法讓他從資料庫讀取資料寫成txt檔就是utf8嗎
不然這樣就失去自動的意義了
謝謝
非常謝謝學長們熱心回答我發問的問題
非常感寫 m(_ _)m

tnsshnews

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
我就是實驗過了阿
用word打開就不是utf8的格式阿


slime

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
我就是實驗過了阿
用word打開就不是utf8的格式阿

用其他軟體(例如 notepad++ 或 ultraedit )開看看?

如果其他軟體都正常, 那就是 Word 的問題, 如果其他軟體也異常, 再來考慮轉碼.
冷笑話: 我的 IP 是 127.0.0.1

elleryq

  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #10 於: 2009-03-23 09:16 »
我就是實驗過了阿
用word打開就不是utf8的格式阿

寫文字檔時,先寫入 bom: (BOM)位元組順序記號

在 linux/unix 環境下,文字檔的編碼多半以環境變數決定,所以文字檔裡面不需要特別指定,在台灣,大多指定為 zh_TW.UTF-8
在 windows 環境下也是如此,在台灣,一般內定為 big5,如果沒有 BOM,讀出時,會假定文字檔就是 big5,也就造成了讀出時,會讀到亂碼
只要補上 BOM,在讀取時,就會知道文字檔編碼為何,而能正確讀出。


Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

tnsshnews

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #11 於: 2009-03-23 14:01 »
但是我去網路上找文章將BOM寫在每一個檔案的第一行
結果打開的時候還是要有問題
而且寫的那一行bom卻變成檔案內容的一行了
似乎不是讓系統辨識編碼的符號


twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #12 於: 2009-03-23 14:30 »
系統辨識?
那是 by 程式的, 程式有支援就會不顯示 BOM, 沒支援就會把 BOM 當成內容顯示.

會變成內容的一行, 不是你的 BOM 寫錯了, 就是那程式不支援.

tnsshnews

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #13 於: 2009-03-23 15:04 »
$sql1="select * from article where aid='10' order by aid asc";
$result1=mysql_query($sql1,$connect_server);
$bom = chr(0xEF).chr(0xBB).chr(0xBF);
while($row1=mysql_fetch_array($result1))
{
   $fp=fopen($row1['aid'].".txt",'a');
   $sql2="select * from punctuate where aid=".$row1['aid']." order by pid asc";
   $result2=mysql_query($sql2,$connect_server);
   while($row2=mysql_fetch_array($result2))
   {
      fwrite($fp,$bom.$row2['punctuate']." ".$row2['pid'].".wav"."\r\n");
   }
}

程式碼如上
我有加上BOM
但是用WORD打開還是要我選擇編碼
不然就還是變成亂碼


twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #14 於: 2009-03-23 15:10 »
你該去問 MS 吧. 為什麼他們自己的程式都不支援 BOM 呢?
換個支援的就不會問你了.

tnsshnews

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #15 於: 2009-03-23 15:21 »
這不只是word的問題
因為這個檔案是要餵給c程式
結果c程式就是因為讀到這個檔案不是utf8
所以執行到一半就當機


twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #16 於: 2009-03-23 15:27 »
是不是 UTF-8 與 BOM 無關.
你的 C 程式當掉的問題請另外找吧. (程式到底是不是你們自己寫的? 如果不是... 請找寫的人去除錯. 如果是自己寫的, 請自己除錯吧. 有程式也有會造成當掉的檔案, 這樣還找不出為什麼當掉, 這樣的除錯能力算是不及格吧)
« 上次編輯: 2009-03-23 15:31 由 twu2 »

tnsshnews

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #17 於: 2009-03-23 15:34 »
我沒有說我的能力及格吧
我只是來這裡詢問大家的意見
如果你非常厲害不想回答這種小問題也沒有人免強你
請不要隨便攻擊別人


micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #18 於: 2009-03-23 17:19 »

用其他軟體(例如 notepad++ 或 ultraedit )開看看?

如果其他軟體都正常, 那就是 Word 的問題, 如果其他軟體也異常, 再來考慮轉碼.
與其在這理問....slime 只說的這部份有試過嗎!?
另外...用C的程式讀...和 word 能不能開一點關係都沒有啊

hikohan

  • 俺是博士!
  • *****
  • 文章數: 1288
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #19 於: 2009-03-23 17:55 »
怪,真的怪。

http://www.google.com.tw/search?hl=zh-TW&q=php+fwrite+utf-8&btnG=Google+%E6%90%9C%E5%B0%8B&meta=&aq=f&oq=

http://tw2.php.net/fwrite

裡面有云:

代碼: [選擇]
<?php
$myString 
"Test with accents éèàç";
$fh=fopen(&#39;test.xml&#39;,"w");
fwrite($fh,utf8_encode($myString));
fclose($fh);
?>

寫出來的text用editplus/UE開,正是UTF-8編碼。

程式看得懂就好了,幹嘛一定要用word開?還要開起來不問編碼?word存入'Test with accents éèàç'成文字檔,再次用word 開,還是問你哪種編碼。

--

論壇本來就是討論跟發言的地方,能力及不及格也不是誰說了就算,又不是性能力不及格?太敏感了吧!

引用
如果你非常厲害不想回答這種小問題也沒有人免強你
請不要隨便攻擊別人

感覺上有人心靈受創的樣子,給你呼呼,下次祝你越挫越勇。
lifeIsFunWithPHP.

tnsshnews

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #20 於: 2009-03-23 23:59 »
終於找到原因了
因為那隻c程式要讀記事本格式是ANSI
原來不是UTF8的問題
那要怎樣才能fwrite記事本是ansi格式呢


micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #21 於: 2009-03-24 08:56 »
終於找到原因了
因為那隻c程式要讀記事本格式是ANSI
原來不是UTF8的問題
那要怎樣才能fwrite記事本是ansi格式呢


轉 big5 就好了啊...

elleryq

  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #22 於: 2009-03-24 09:07 »
   $fp=fopen($row1['aid'].".txt",'a');
用 'wb' 開看看~

   while($row2=mysql_fetch_array($result2))
   {
      fwrite($fp,$bom.$row2['punctuate']." ".$row2['pid'].".wav"."\r\n");
   }
}
不應該放在 while 裡面,fopen 之後,寫 BOM,1 次就好,之後再開始跑 while

big5 的話,就轉碼之後再寫,但就不用寫 BOM 了~
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

tnsshnews

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
回覆: [請益] fwrite寫成txt檔案需要指定編碼嗎
« 回覆 #23 於: 2009-03-25 14:35 »
用iconv將資料庫內的資料轉成big5在存入檔案
問題解決了
謝謝各位辛苦的幫忙