台灣最具影響力的-資訊專家社群 - 讓您成為最有價值的IT專業人才
線上人數
2018
 
會員總數:197934
接案會員:6196
文章總數:2320
討論主題:151331
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 加了「GetEncoding("utf-8")」,Excel還是亂碼

[變換順序]
[我要回覆]


回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
加了「GetEncoding("utf-8")」,Excel還是亂碼
價值 : 30 QP  點閱數:3836 回應數:19

點圖分享到Plurk吧!
樓主

蔥仔
初學者
525 67
1018 189
我把DataGrid匯出成Excel,加上了Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8")
但是,匯出來的Excel還是亂碼耶...
該怎麼辦啊?
我的程式碼如下:


本篇文章發表於2007-08-28 16:58
VP、EP、QP、HP該如何使用? 2010年藍色小舖認證專家風雲榜完全名單
1樓
回應

Hsiu
初級專家
1338 1
1960 307
捐贈 VP 給 Hsiu 檢舉此回應
小弟淺見~~
我剛剛有試了一下有沒有這一行
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8")
所轉出來的資料都沒有亂碼唷~~
不過你要不要看看這一篇和你的問題很相同唷
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20070806133719GT4


本篇文章回覆於2007-08-28 18:09
2樓
作者回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
謝謝你
這篇我有看過,也試了文中提到的語法,但還是一樣..
匯出來的中文資料是亂碼...
真不知道是哪邊出了問題..


本篇文章回覆於2007-08-29 10:11
3樓
回應

CMH
初學者
1 1
130 3
檢舉此回應
試試看將 utf-8 改成 big5如下:

Response.ContentEncoding = System.Text.Encoding.GetEncoding("big5")

祝你好運!!


本篇文章回覆於2007-09-21 10:28
4樓
作者回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
一樣ㄟ...還是亂糟糟


本篇文章回覆於2007-09-24 11:09
5樓
回應

JouMing
高級專家
7064 113
6240 2094
檢舉此回應
您的問題我有遇過,
也找過許多文章怎麼改都不行,

而且我發現跟匯出的行數多少有關係,
您可以先用記事本把匯出的檔案打開,
然後再直接存檔(不需另存),
然後再用excel打開試試看是不是正常。


本篇文章回覆於2007-09-24 11:42
字數限制:150字,會顯示在討論文章的最下方 *(修改後30分鐘內會顯示出來)
6樓
回應

淳淳的小羊
初級顧問
18586 38
8180 2602

捐贈 VP 給 小羊窒息 檢舉此回應
Dim oStringWriter As New System.IO.StringWriter
Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter)
Response.Write(" <meta http-equiv=""Content-Type"" content=""text/html; charset=utf8""> ")'加上語系指定utf-8
Results.RenderControl(oHtmlTextWriter) '這個地方的datagrid改成你datagrid的名字
Response.Write("<style>td{mso-number-format:\@}</style>")
Response.Write(oStringWriter.ToString())
Response.End()



本篇文章回覆於2007-09-24 14:48
姜太公釣魚,願者上鉤
(簽名檔要修改個人資料才看的到)
7樓
作者回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
To JunMing,

用記事本打開來看是含有<Table>等標籤,但中文方面正常,可是存檔後用Excel打開,還是一樣亂糟糟


本篇文章回覆於2007-09-26 16:36
8樓
作者回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
to 小羊.
加上了,可還是一樣亂糟糟


本篇文章回覆於2007-09-26 16:43
9樓
回應

lsk
初級顧問
15310 61
6315 2118

捐贈 VP 給 lsk 檢舉此回應
要不要試一下
Response.ContentEncoding = System.Text.Encoding.UTF7;
我是這樣解決的


本篇文章回覆於2007-09-26 17:32
<b>簽名</b>
10樓
回應

淳淳的小羊
初級顧問
18586 38
8180 2602

捐贈 VP 給 小羊窒息 檢舉此回應
用記事本開啟你的 xxx.xls,
看能不能看到 [中文字]...

如果可以看的到, 表示匯出的資料格式正確, (我覺得問題是出在這裡)...

這時...選另存新檔,
會有[編碼] 可以選擇, 看看目前的選項是不是 utf8,

如果不是(如果是ANSI), 那就要把charset=utf8 改為big5 (不過,如果是ANSI的話, 不要加這一行就ok了...改這個也沒意義)



本篇文章回覆於2007-09-26 19:20
姜太公釣魚,願者上鉤
(簽名檔要修改個人資料才看的到)
11樓
作者回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
To Isk,
用UTF7,不行ㄟ.....匯出來的Excel還是無法正常顯示,連用記事本開來看都沒辦法正常顯示,裡面的數字全部都變得很怪

To 小羊
用記事本開我可以正常的看到中文,
我用另存新檔的時候,格式顯示是utf8,不過我把它改為Unicode重新存檔,再用Excel開啟的時候就OK了。
所以我想說是不是在程式端改為Response.ContentEncoding = System.Text.Encoding.Unicode 就OK,結果不行。
我把須把匯出來的檔案利用記事本改為 utf8 然後再改為 unicode 才能正常的用Excel開啟。
怎麼那麼奇怪。

雖然在程式端指定為utf8,匯出以後再改為unicode可以正確開啟,可以達到我的目的。
可是我的使用者肯定會發瘋!
有啥辦法可以匯出來的Excel就是正確的格式嗎?


本篇文章回覆於2007-09-27 13:40
12樓
作者回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
我找到方法了,
Response.ContentEncoding = System.Text.Encoding.Default
就OK了
是啥原因啊???


本篇文章回覆於2007-09-27 13:44
13樓
作者回應

蔥仔
初學者
525 67
1018 189
檢舉此回應
Response.ContentEncoding = System.Text.Encoding.Default
這一行似乎不是完全通用的。

用一樣的Excel匯出程式,匯出不同的資料時,有些匯出來的還是亂碼.......
真是怪....
Response.ContentEncoding = System.Text.Encoding.Default
Response.ContentEncoding = System.Text.Encoding.Utf8
Response.ContentEncoding = System.Text.Encoding.Utf7..等等,都試過了..還是不行...



本篇文章回覆於2007-09-28 16:31
14樓
回應

淳淳的小羊
初級顧問
18586 38
8180 2602

捐贈 VP 給 小羊窒息 檢舉此回應
我在匯出資料時, 是完全不會去改Response.ContentEncoding 的

我只有在web.config指定為 utf8...

我匯出的方式是:

Dim ExcelHeader As String = "<html><head><meta http-equiv=Content-Type content=""text/html; charset=utf8""></head><body>"
Dim ExcelFooter As String = "</body></html>"
Dim TableData As String = "........................................"

Dim WriteData As String = ExcelHeader & TableData & ExcelFooter

Response.Clear()
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(FileName).ToString())
Response.ContentType = myContentType

Response.Write(WriteData)
Response.End()

==============================
匯出後的資料:用記事本打開,可以看到中文字,按下另存新檔:檔案格式是utf8

(Excel預設在開檔案時,是用big5的格式去打開的,所以我加上html標籤charset=utf8, 讓Excel知道這個檔案是utf8的格式)


本篇文章回覆於2007-09-28 19:29
姜太公釣魚,願者上鉤
(簽名檔要修改個人資料才看的到)
15樓
回應

lsk
初級顧問
15310 61
6315 2118

捐贈 VP 給 lsk 檢舉此回應
可以問一下你Office是多少?2000?2003?2007?
我遇過用Office2000如果匯出資料量太少會亂碼
好像是M$的Bug,因為一樣的程式用2007就正常


本篇文章回覆於2007-09-29 08:19
<b>簽名</b>
[變換順序]
 

回覆
如要回應,請先登入.