2014-12-28 1 views
0

Google 번역을 사용하는 추가 옵션이있는 작은 사전을 만들고 있습니다. 여기에 문제가 있습니다. Google의 응답을 받아 텍스트 상자에 표시하면 이상한 기호가 나타납니다.Google 번역에서 C#으로 문자열 변환

public string TranslateText(string inputText, string languagePair) 
    { 
     string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", inputText, languagePair); 

     WebClient webClient = new WebClient(); 
     webClient.Encoding = System.Text.Encoding.UTF8; 

     // Get translated text 
     string result = webClient.DownloadString(url); 

     result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length); 
     result = result.Substring(result.IndexOf(">") + 1); 
     result = result.Substring(0, result.IndexOf("</span>")); 

     return result.Trim(); 
    } 

.. 그리고이 같은이 메서드를 호출은 (후 변환 버튼 클릭) : 여기 은 "요청"방법의 코드 구글

string resultText; 
string inputText = tbInputWord.Text.ToString(); 

if (inputText != null && inputText.Trim() != "") 
{ 
    ExtendedGoogleTranslate urlTranslate = new ExtendedGoogleTranslate(); 

    resultText = urlTranslate.TranslateText(inputText, "en|bg"); 

    tbOutputWord.Text = resultText; 
} 

을 그래서 (영어 번역입니다 UTF8와 불가리아어 엔) (BG) 및 인코딩 웹 클라이언트 그래서 어떻게 든 befor을 resultText을 구문 분석 발신자 코드에 뭔가를 놓치고 있다고 생각 그것을 tbOutputWord 텍스트 박스에 놓습니다. 나는이 코드가 작동한다는 것을 알고있다. 왜냐하면 내가 영어에서 프랑스어로 번역을 선택하면 (예를 들어) 올바른 결과를 보여주기 때문이다.

+0

당신은'에 대한 샘플 요청을 제공 할 수 http://www.google.com/translate_t?hl=en&ie=UTF8&text={0} & langpair = {1}'이 "이상한 기호"를 산출합니까? – khlr

+0

** inputText ** equals ** "hello"** 결과가 ** "Здравейте"**이어야합니다 ** 대신 ** "????????? **"**하지만 변경하면 ** "en | bg"** ~ ** "en | fr"** 동일한 입력을 사용하면 결과는 ** "bonjour"** –

답변

2

어쨌든 Google은 ie=UTF8 검색어 매개 변수를 사용하지 않습니다. 그 UTF8가 반환되도록 우리는 우리의 요청에 몇 가지 헤더를 추가해야합니다

WebClient webClient = new WebClient(); 
webClient.Encoding = System.Text.Encoding.UTF8; 
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0"); 
webClient.Headers.Add(HttpRequestHeader.AcceptCharset, "UTF-8"); 
+0

이상하지만 작동합니다! 이제 다른 버그가 튀어 나왔습니다. 이런 식으로 번역 할 때 : "이봐, 괜찮 니?" 모든 것이 잘 작동하지만, 다음과 같은 입력을하면 : "이봐, 괜찮 니?" "Hey!"만 번역합니다. 또한 내 코드에서 볼 수 있듯이 inputTextBox에서 직접 (현재는) 읽었으며 형식이 없지만 한 번에 한 문장 만 번역되는 것처럼 보입니다. –

+1

당신은 1.) 다른 방식으로 쿼리 문자열을 구성해야합니다. 그것을 이렇게 고려하십시오 : http://stackoverflow.com/a/1877016/4317569 당신의 현재 문제는, 또 다른 한개이다 : 당신은 결과를 파싱하기위한 정규 표현식이 필요하다. 'DownloadString' 다음에 중단 점을 설정하면 번역이 작동하는 것을 볼 수 있습니다. 파싱이 문제입니다. – Frank

+0

응답에 각 문장마다 ** ** 태그가 포함되어있는 것을 보았 기 때문에 루프가있는 문제를 해결했습니다. –