http://gall.dcinside.com/board/view/?id=programming&no=608623&page=1&search_pos=&s_type=search_all&s_keyword=c#
예전에 글자 깨짐으로 질문했다가 변변한 답변은 못받고 헤메다가 구글링을하여 결국 해결방법을 알아냈습니다!!! 갓 구글링...
string source_url = "주소입력"
WebClient wc = new WebClient();
Stream st = wc.OpenRead(source_url);
Encoding enc = Encoding.GetEncoding("utf-8");
StreamReader sr = new StreamReader(st, enc);
string html = sr.ReadToEnd();
string _html = wc.DownloadString(source_url);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
HtmlAgilityPack.HtmlNodeCollection _nodes = doc.DocumentNode.SelectNodes("//div[@class='a1wrp']//h3//a[@href]");
var nodes = _nodes;
string value = "";
int i = 0;
string[] xx = new string[40];
var nodes1 = _nodes;
foreach (var node in nodes1)
{
value = node.InnerText + "\r\n";
textBox1.Text += value.ToString();
xx[i] = value.ToString();
//System.Threading.Thread.Sleep(100);
i++;
}
이렇게 하니까 정상적으로 출력이 되더군요
제가 저 처음에 쓴 방법은
사이트 URL에서 HTML 파일은 다운 받은다음 그 HTML 파일을 로드한다음 파싱하는 방법인데 왜 위에 코드는 정상적으로 출력되고 제가 처음에 쓴 방법은 글자가 깨지는 걸까요?
보통 문자가 깨질때는 인코딩이 안맞아서 문제가 발생함
html이랑 _html 변수 2개가 있는데 html의 경우에는 스트림을 열고 인코딩을 UTF-8로 맞추고 진행해서 안깨짐
헤메다->헤매다 (국어사전 - 헤매다 [동사] : 갈 바를 몰라 이리저리 돌아다니다.) [리듬 맞춤법 봇♬]
반면 _html은 WebClient 객체에 Encoding 설정 없이 그냥 DownloadString 함수를 호출하기 때문에 기본 인코딩으로 다운받아서 문자가 깨짐
WecClient.Encoding = Encoding.UTF8; 이 코드를 DownloadString 앞에 집어넣으면 문자가 깨지지 않음
wc.Encoding = Encoding.UTF8
ㅇㅎ 기본 인코딩으로 다운받아서 깨지는거였군요 첫번째 시도했던 코드에도 한번 약간 수정해서 다시 시도해봐야겠네요