2012年5月24日 星期四

csv 欄位內容裡的 數字0 透過 Excel 開啟後消失的解法

最近做了一個匯出 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 的話可以透過:

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 檔就正常了.

2012年5月11日 星期五

java 雞婆的合併tag 造成畫面跑版

雞婆的 java 的 xsl 處理時, 自動合併 tag, <noscritp></noscritp> 合併成 <noscript /> , html 畫面如下:

說明: 在 noscript tag 之後都東西, 通通算在 noscript 裡, 所以瀏覽器就通通看不到東西, 當然我覺得這個瀏覽器真笨, 目前 google chrome 20.0 + firefox v13.0 + ie 8 通通顯示不出來, 都是笨笨的瀏覽器.


發生的原因 如下:
說明: 因為 if ... 到  /xsl:if 不成立.


解決辦法: 增加&nbsp; 在 noscript 區塊裡, 讓 noscript tag 不會自動被合併.

2012年5月9日 星期三

java 雞婆的合併tag 造成css 或 script 相容性上的問題

前陣子做的好 google map, 如下圖, 系統分析師今天反應有一個 block 消失了, 我檢查一下 html 元素, 真的被蓋過去了.

說明: 右上方有一個透明的橘色區塊, 被 google map 蓋過去.


我先挑戰在這個 block 增加 css style="clear:both;" 一樣無解, 只好求助UI設計大師 Anita, 調了很久也弄不出所以然, 最後 Anita 發現問題在這一個 block 被包含在 google map 的 div tag 裡, 終於找到發生的原因就是 JSP 在處理 xsl 時, 把
合併成一個
所以造成的錯誤, 結論就是在 div 裡增加   讓 div 不會雞婆的自動被合併, xsl 程式碼如下:


如果, 不增加   的話, 產生出來的 html 如下:
<div style="width:100%;" id="map_canvas" class="mapimg" />


由於不是第1次 遇到, 之前也有因為 tag 被合併後, div 吃不到 css 的 class 的情況, 所以這次比較快就解決了, 解決後正常的畫面如下:
說明: 被蓋住的 block 就秀出來了, 感動...

取得 google map 的坐標方法2

不知為何, google map API 輸入地址都會定到錯誤的地點, 所以改使用坐標來定位, 取得google map 定位點坐標(latitude + longitude)的方法之一參考看看下列3個步驟.


步驟1:  在 google map 上任何一個地方按右鍵, 選取 "這裡有什麼?" 按完之後畫面就會多出一個綠色小箭頭.



步驟2: 滑鼠移到(on mouse over) 產生出來的綠色小箭頭就會看到坐標.


步驟3: 點一下(on click) 產生出來的綠色小箭頭, 就會彈出這個對話框, 裡頭有街景和坐標.

取得google map 定位點坐標(latitude + longitude)的方法之一

不知為何, google map API 輸入地址都會定到錯誤的地點, 所以改使用坐標來定位, 取得google map 定位點坐標(latitude + longitude)的方法之一參考看看下列3個步驟.


步驟1: 到 google map 輸入 keyword 找到一個坐標.
說明: 按下右邊的標題的超連結, 右邊google map 就會彈出一個對話框, 選取框框裡的 "更多資訊" -- "傳送".


步驟2: 在傳送的框框裡, 會有一個超連結, 用 "複製超連結" 或 "連結另開新視窗", 就可以看到定位點.



步驟3: 成功取得坐標.


說明: 複製出來的網址, URL:
http://maps.google.com.tw/maps?f=q&source=s_q&hl=zh-TW&geocode=&q=Riparian+Plaza&aq=&sll=-27.468183,153.030109&sspn=0.001323,0.002041&vpsrc=0&brcurrent=3,0x0:0x0,0&ie=UTF8&ll=-27.468466,153.030831&spn=0.002059,0.003484&t=m&z=19&iwloc=A&cid=839265525257578925

2012年5月8日 星期二

指定 google map 的 button 和地名 用的語系(language)

在預設, 沒有指定語系的情況下, google map API 會自動判斷 user os 正在使用中的語系, 來輸出 button 的 label 和 地名, 我覺得很合理, 這個情況下就可以會產生下列的畫面:
說明: 在英文版的畫面中, 出現 中文字的 "地圖",  會出現中文字是因為 user 使用中文的 OS.

解決的辦法是在引用 google api 的 js 時, 增加 language 參數即可, 例如:
type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&language=en"

跑出來的畫面如下:
說明: 中文版 button 寫 地圖, 英文版 button 寫 Map

Facebook 留言板