最近做了一個匯出 csv 的功能, 一般的情況下手機都是數字 0 開頭, 例如: 09xx-xxx-xxx 但是用 Excel 開啟後該欄位的0 會被Excel 刪掉, 剩下 9xx-xxx-xxx 以前的解法是增加一個單引號為起始符號, 這個解法目前也還可以用, 但單引號也會一起出來, 變的不好看也很奇怪, 由於是要匯給 Excel 所以就透過公式的等號(=) 來解決, csv 內容如下:
再透過 Excel 開啟, 就可以看到漂亮的數字0 了, 感動ing.
2012年5月21日 星期一
Asp 中強迫輸出 BOM 字元的方式
做了一個匯出資料的功能, 但產生出來的 Utf-8 編碼 csv 檔, 用 Excel 檔開啟都會是亂碼, 他應該是誤以為是 ANSI 格式, 這次的目的是要讓 Excel 正常開啟 Utf-8 編碼 csv 檔.
如果是 asp.net 的話可以透過:
來產生, utf-8 識別用的(BOM)字元.
如果是 php 的話, 就是:
fwrite($fp, "\xEF\xBB\xBF".$output)
如果是 asp 的話, 可以透過下列的函數來丟出 BOM 字元,
sub SendHex(valHex)
for cHex = 1 to Len(valHex) step 2
Response.BinaryWrite ChrB(CByte("&H" & Mid(valHex,cHex,2)))
next
end sub
我比較建議使用下面這個方法:
Response.CodePage = 65001
Response.BinaryWrite(chrb(239))
Response.BinaryWrite(chrb(187))
Response.BinaryWrite(chrb(191))
如果是 asp.net 的話可以透過:
protected void Page_PreRender(object sender, EventArgs e) { Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF }); }
來產生, utf-8 識別用的(BOM)字元.
如果是 php 的話, 就是:
fwrite($fp, "\xEF\xBB\xBF".$output)
如果是 asp 的話, 可以透過下列的函數來丟出 BOM 字元,
sub SendHex(valHex)
for cHex = 1 to Len(valHex) step 2
Response.BinaryWrite ChrB(CByte("&H" & Mid(valHex,cHex,2)))
next
end sub
我比較建議使用下面這個方法:
Response.CodePage = 65001
Response.BinaryWrite(chrb(239))
Response.BinaryWrite(chrb(187))
Response.BinaryWrite(chrb(191))
另一個解法是透過 Server.CreateObject("ADODB.Stream") 物件來增加(或移除) BOM 字元, 參考看看: http://www.andmm.cn/post/48.html
我是透過ADODB.Stream 來處理, 最後用 Excel 開啟 csv 檔就正常了.
訂閱:
文章 (Atom)


