2014-01-12 97 views
0

我正在構建一款應用程序,以訪問適用於Windows Phone的Google翻譯。我注意到,對於翻譯後的文字會有外來字符的語言,文本框會全部搞砸,而不是顯示隨機符號等等。不知道爲什麼。我需要在文本框中啓用某些內容嗎?c#windows手機 - 文本框不懂外文字符?

代碼:

private void btnTranslate_Click(object sender, RoutedEventArgs e) 
    { 
     string text = txtboxOriginal.Text; 
     string fromLanguage; 
     string toLanguage; 
     //Use Bing. 
     if ((bool)settings["translateIsBing"] == true) 
     { 
      if (string.IsNullOrWhiteSpace(text)) 
      { 
       MessageBox.Show("Can't translate with nothing to translate. Please try again."); 
      } 
      else 
      { 

      } 
     } 

     //Use Google. 
     else if ((bool)settings["translateIsGoogle"] == true) 
     { 
      if (string.IsNullOrWhiteSpace(text)) 
      { 
       MessageBox.Show("Can't translate with nothing to translate. Please try again."); 
      } 
      else 
      { 
       fromLanguage = this.getLanguageCodeGoogle(lstOriginalLanguages.SelectedIndex.ToString()); 
       toLanguage = this.getLanguageCodeGoogle(lstTranslateToLanguages.SelectedIndex.ToString()); 
       string url = "http://translate.google.com/translate_t?text=" + text + "&sl=" + fromLanguage + "&tl=" + toLanguage; 
       WebClient webclient = new WebClient(); 
       webclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webclient_DownloadStringCompleted); 
       webclient.DownloadStringAsync(new Uri(url, UriKind.RelativeOrAbsolute)); 
      } 
     } 

    } 

void webclient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error == null) 
     { 
      try 
      { 
       Debug.WriteLine(e.Result); 
       string result = e.Result; 
       int startPosition = result.IndexOf("TRANSLATED_TEXT='"); 
       int length = result.IndexOf(@"';INPUT") - startPosition; 
       string partial = result.Substring(startPosition, length); 
       Debug.WriteLine("Step 1: {0}", partial); 
       startPosition = partial.IndexOf("'") + 1; 
       length = partial.Length - startPosition; 
       string secondPartial = partial.Substring(startPosition, length); 
       Debug.WriteLine("Step 2: {0}", secondPartial); 
       translatedText = secondPartial; 
       txtboxOriginal.Text = secondPartial; 
       btnTranslate.Content = "Translated"; 
       btnTranslate.IsEnabled = false; 
       btnCopy.Visibility = Visibility.Visible; 
       btnCopy.IsEnabled = true; 
       btnReset.Visibility = Visibility.Visible; 
       btnReset.IsEnabled = true; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

回答

0

這些問題是可以通過編碼類型從谷歌的響應。 當你看內容類型的響應並不總是UTF8這是什麼WebClient.DownloadStringAsync解碼它,所以你必須改變解碼類型

你將不得不改變Webclient.Encoding相匹配的請求類型

可以找到問題的解決方案here