C # преобразует символы ISO-8859-1 в номер объекта - PullRequest
2 голосов
/ 25 ноября 2010

Кажется, я не могу понять, как преобразовать символы ISO-8859-1, такие как é, в его номер сущности é.

Я хочу иметь возможность взять строку, например: "Steel Décor"

и преобразовать в: "Сталь D é кор"

Ответы [ 3 ]

3 голосов
/ 25 ноября 2010

Если вы не заботитесь о символах HTML-кодировки, которые являются особыми в HTML (например, <, & и т. Д.), Будет работать простой цикл над строкой: </p>

string input = "Steel Décor";
StringBuilder output = new StringBuilder();
foreach (char ch in input)
{
    if (ch > 0x7F)
        output.AppendFormat("&#{0};", (int) ch);
    else
        output.Append(ch);
}
// output.ToString() == "Steel D&#233;cor"

Возможно, потребуется изменить оператор if, чтобы он также экранировал символы < 0x20 или не алфавитно-цифровые и т. Д., В зависимости от ваших конкретных потребностей.

1 голос
/ 25 марта 2011

с использованием LINQ

string toDec(string input)
{
    Dictionary<string, char> resDec =
        (from p in input.ToCharArray() where p > 127 select p).Distinct().ToDictionary(
            p => String.Format(@"&#x{0:D};", (ushort)p));

    foreach (KeyValuePair<string, char> pair in resDec)
        input = input.Replace(pair.Value.ToString(), pair.Key);
    return input;
}
1 голос
/ 25 ноября 2010

HttpUtility.HtmlEncode делает это. Он находится в System.Web.dll, но не работает с клиентским профилем .NET 4, например.

...