Re: [問題] WP8.1開發HttpClient亂碼

作者: linlts823 (lin)   2014-07-13 22:17:17
※ 引述《linlts823 (lin)》之銘言:
: 最近嘗試寫wp的app遇到了問題
: 用httpclient取得json資料時,
: 若資料中包含中文會變成亂碼
: 爬了版上的文章,有一篇的推文有提到要去nuget裝library來做encode/decode
: 於是我就裝了一個叫做 portable.text.encoding 的套件
: 但是還是不知道怎麼把亂碼變回正確的資料
: 試了把亂碼資料透過那個套件轉回byte array再用big5轉回string可是沒有用
: 有沒有前輩能夠指導一下? 謝謝~
來自問自答一下好了XD
一開始我用HttpClient的GetStringAsync得到的字串中文會變成亂碼
想要先得到byte array再選擇編碼轉成字串,卻又找不到GetByteArrayAsync之類的方法
後來才發現之前寫Windows.Web.HttpClient跟System.Net.HttpClient的方法不太一樣
以下是我的解決方法:
1. 用NuGet安裝Portable.Text.Encoding套件
2. 用HttpClient的GetBufferAsync取得Content的IBuffer物件
3. 用Windows.Storage.Streams.DataReader.FromBuffer取得DataReader
4. 用DataReader的ReadBytes就可以取得Byte Array Data
5. 用Portable.Text.Encoding.UTF8.GetString取得String Data
這樣讀出來的中文就不是亂碼了
如果有遇到類似問題的可以試看看~謝謝~
作者: felaray (傲嬌魚)   2014-07-13 22:21:00
我總記得不用特別裝編碼的套件..不過code忘了放哪去了..
作者: Kelunyang (可倫)   2014-07-13 22:23:00
其實沒關係,反正這個 nuget 套件支援 PCL ,就算移植到Win8也沒差XD
作者: linlts823 (lin)   2014-07-13 22:32:00
後來試了System.Text.Encoding去轉,的確也可以轉出正確的中文字串
作者: Kelunyang (可倫)   2014-07-14 05:25:00
你測試過8.0也可以用內建轉碼,不用另外裝嗎?
作者: hungys (hungys)   2014-07-14 10:08:00
是什麼情況會亂碼呀?自己沒遇過@@
作者: felaray (傲嬌魚)   2014-07-14 12:18:00
語系不同的時候會亂吧 例如用HtmlAgilityPack
作者: Kelunyang (可倫)   2014-07-14 17:11:00
網頁是 big5 或是GB簡體編碼的時候XD

Links booklink

Contact Us: admin [ a t ] ucptt.com