WebClient.DownloadString으로 인해 인코딩 문제로 인해 문자가 왜곡되지만 브라우저는 정상입니다.


85

다음 코드 :

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

text다른 많은 것들 중에서 문자열을 포함 하는 변수 가됩니다.

"$ κ $ -Minkowski 공간, 스칼라 필드 및 Lorentz 불변의 문제"

그러나 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다른 방식으로 실패합니까? 이 문제를 완화하려면 어떻게해야합니까?


6
UTF8Encoding.Default실제로 Encoding.Default는 OS 언어 설정에 기반한 ANSI 인코딩입니다.
svick

답변:


201

거짓말이 아닙니다. DownloadString을 호출하기 전에 먼저 웹 클라이언트의 인코딩을 설정해야합니다.

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()

9
훌륭 해요, 고맙습니다! 이상하게도 WebClient헤더를 사용하여이를 감지하지 않지만 이것은 완벽하게 작동하며 당신과 @svick 사이에서 내가 시도한 다른 일이 왜 비참하게 실패했는지 이해합니다.
Domenic

1
대한 작품 UploadString뿐만 아니라
irfandar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.