Перекодировать URL из utf-8 в кодировке iso-8859-1 - PullRequest
4 голосов
/ 18 декабря 2009

У меня есть file: // ссылки с неанглийскими символами, которые кодируются в UTF-8. Чтобы эти ссылки работали в браузере, я должен перекодировать их.

file://development/H%C3%A5ndplukket.doc

становится

file://development/H%e5ndplukket.doc

У меня есть следующий код, который работает:

public string ReEncodeUrl(string url)
{
    Encoding enc = Encoding.GetEncoding("iso-8859-1");
    string[] parts = url.Split('/');
    for (int i = 1; i < parts.Length; i++)
    {
        parts[i] = HttpUtility.UrlDecode(parts[i]); // Decode to string
        parts[i] = HttpUtility.UrlEncode(parts[i], enc); // Re-encode to latin1
        parts[i] = parts[i].Replace('+', ' '); // Change + to [space]
    }
    return string.Join("/", parts);
}

Есть ли более чистый способ сделать это?

Ответы [ 3 ]

1 голос
/ 06 января 2010

Я думаю, что это довольно чисто на самом деле. Это читабельно, и вы сказали, что он работает правильно. Пока реализация скрыта от потребителя, я не буду беспокоиться о том, чтобы выжать это последнее улучшение.

Если вы выполняете эту операцию чрезмерно (например, сотни выполнений на событие), я бы подумал о том, чтобы исключить реализацию из UrlEncode / UrlDecode и перенаправить их друг в друга, чтобы повысить производительность, устраняя необходимость в разбиении строки присоединяйтесь, но тестирование должно было бы доказать это в любом случае и определенно не было бы "чистым": -)

0 голосов
/ 29 декабря 2009

по общему признанию, некрасиво и не совсем улучшение, но может перекодировать все это целиком (избегать разделения / повторения / объединения), а затем .Replace ("% 2f", "/")

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

0 голосов
/ 18 декабря 2009

Хотя я не вижу какого-либо реального способа изменить его, что могло бы изменить ситуацию, разве нельзя заменить символ + на пробел перед вашим UrlEncode, чтобы он превратился в% 20?

...