2014-01-08 4 views
0

У меня есть программа, которая делает некоторые скриншоты экрана на французской веб-странице и находит определенную строку. После того, как я нашел, я беру эту строку и сохраняю ее. Возвращаемая строка отображается как User does not have a desktop configured. или на французском языке как L'utilisateur ne dispose pas d'un bureau configuré., но на самом деле отображается как: L**\x26#39**;utilisateur ne dispose pas d**\x26#39**;un bureau configur**�**. Как я могу рассмотреть ее в качестве апострофа '.Пытается преобразовать строку в правильный формат/кодировку?

Есть ли что-то в C#, которое я могу использовать для чтения Url и возврата правильной фразы.

Я просмотрел множество доступных возможностей C#, но не могу найти тот, который предоставит мне правильный результат.

Пример кода пытался играть с:

// translated the true French text to English to help out with this example. 
// 
Encoding winVar1252 = Encoding.GetEncoding(1252); 
Encoding utf8 = Encoding.UTF8; 
Encoding ascii = Encoding.ASCII; 
Encoding unicode = Encoding.Unicode; 

string url = String.Format("http://www.My-TEST-SITE.com/); 
WebClient webClient = new WebClient(); 
webClient.Encoding = System.Text.Encoding.UTF8; 
string result = webClient.DownloadString(url); 
cVar = result.Substring(result.IndexOf("Search_TEXT=")).Length ; 
result = result.Substring(result.IndexOf("Search_TEXT="), cVar); 
result = WebUtility.HtmlDecode(result); 
result = WebUtility.UrlDecode(result); 
result = result.Substring(0, result.IndexOf("Found: ")); 

Это возвращает L**\x26#39**;utilisateur ne dispose pas d**\x26#39**;un bureau configur**�**. , когда он должен вернуться: L'utilisateur ne dispose pas d'un bureau configuré..

Я пытаюсь избавиться от \x26#39 и получить соответствующие французские символы, чтобы показать, как é ê è ç â и т.д.

+0

Любая конкретная причина, по которой вы не хотите использовать надлежащий инструмент, такой как HtmlAgilityPack для веб-шрамов? –

+4

Вы смешиваете много вещей вместе. В принципе, UTF8 - это способ кодирования символов, а Unicode - представление. Я предлагаю вам сначала прочитать эту удивительную статью об этом, и вы поймете, что происходит. http://www.joelonsoftware.com/articles/Unicode.html –

+0

Я не знал о «HtmlAgilityPack», теперь читаю документацию. Что касается сайта Джоэла ... да, я это видел, но это не говорит мне, почему я до сих пор не вижу кодов UTF8 в моем обрыве экрана. Попытка найти идеальный код, чтобы получить правильный текст. – user3147056

ответ

0

Я не могу быть уверен, но:

result = result.Substring(result.IndexOf("Search_TEXT="), cVar); 
result = WebUtility.HtmlDecode(result); 
result = WebUtility.UrlDecode(result); 

Двойной декодирования текста не может быть хорошо. Это либо URL, либо HTML, либо нет. Не оба.

+0

try: result = WebUtility.HtmlDecode (result); // result = WebUtility.UrlDecode (результат); затем // result = WebUtility.HtmlDecode (result); result = WebUtility.UrlDecode (результат); только UrlDecode дал мне ошибку о размере строки. – user3147056

0

Похоже, что ваша первая проблема не с кодировкой символов, а с пользовательской комбинацией "\x" escaped sequence и скрытой html entities.

Это забавное **\x26#39**; на самом деле просто простая цитата. Переведенный шестнадцатеричный символ \x26 становится &, поэтому вы получаете **&#39**;. Удалите посторонние звезды, и вы получите объект html '. С HtmlDecode это становится простым апострофом, ', который является просто символом ascii. 39.

Попробуйте этот фрагмент. Обратите внимание, что только последний шаг - мы можем сделать HtmlDecode.

var input = @"L**\x26#39**;utilisateur ne dispose pas d**\x26#39**;un bureau configur**�**"; 

var result = Regex.Replace(input, @"\*\*([^*]*)\*\*", "$1"); // Take out the extra stars 

// Unescape \x values 
result = Regex.Replace(result, 
         @"\\x([a-fA-F0-9]{2})", 
         match => char.ConvertFromUtf32(Int32.Parse(match.Groups[1].Value, 
                    System.Globalization.NumberStyles.HexNumber))); 

// Decode html entities 
result = System.Net.WebUtility.HtmlDecode(result); 

Выход L'utilisateur ne dispose pas d'un bureau configur�

Вторая проблема связана с ударением "е". Это на самом деле проблема с кодировкой, и вам, вероятно, придется продолжать играть с ней, чтобы все было правильно. Вы также можете попробовать UTF16 или даже UTF32. Но HtmlAgilityPack может просто позаботиться об этом для вас автоматически.

Смежные вопросы