Dot-Net

WebClient.DownloadString 由於編碼問題導致字元損壞,但瀏覽器正常

  • August 21, 2011

以下程式碼:

var text = (new WebClient()).DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"));

產生一個變數text,其中包含許多其他內容,字元串

“$κ$-Minkowski 空間、標量場和洛倫茲不變性問題”

但是,當我在 Firefox 中訪問該 URL 時,我得到

$κ$-Minkowski 空間、標量場和洛倫茲不變性問題

這實際上是正確的。我也試過

var data = (new WebClient()).DownloadData("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
var text = System.Text.UTF8Encoding.Default.GetString(data);

但這給出了同樣的問題。

我不確定問題出在哪裡。提要是否是 UTF8 編碼的,瀏覽器是否足夠聰明,可以解決這個問題,但不是WebClient嗎?提要是否正確 UTF8 編碼,但WebClient以其他方式失敗?我能做些什麼來減輕這種情況?

這不是說謊。在呼叫 DownloadString 之前,您應該先設置 webclient 的編碼。

using(WebClient webClient = new WebClient())
{
webClient.Encoding = Encoding.UTF8;
string s = webClient.DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
}

至於為什麼您的替代方案不起作用,那是因為用法不正確。它應該是:

System.Text.Encoding.UTF8.GetString()

引用自:https://stackoverflow.com/questions/7137165