UTF-8转义序列为字符串:肯定是一种更好的方法

时间:2015-04-06 16:44:44

标签: c# string encoding utf-8

回顾一下我的一些旧代码,并想知道是否有更好的方法来创建带有unicode符号的文字字符串......

我有一个REST接口,需要某些转义字符;例如,一个名为username的属性,其值为john%foobar + Smith,必须像这样请求:

{"username":"john\u0025foobar\u002bSmith"}

我的c#方法替换像%和+这样的某些字符非常基本:

public static string EncodeUTF8(string unescaped) {
    string utf8_ampersand = @"\u0026";
    string utf8_percent = @"\u0025";
    string utf8_plus = @"\u002b";
    return unescaped.Replace("&", utf8_ampersand).Replace("+", utf8_plus).Replace("%", utf8_percent);
}

这似乎是一种过时的方式;肯定有一些使用编码的单行方法可以输出文字的UTF代码,但我找不到任何基本上没有像我一样替换语句的例子......有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式执行此操作:

static readonly Regex ReplacerRegex = new Regex("[&+%]");

public static string Replace(Match match)
{
    // 4-digits hex of the matched char
    return @"\u" + ((int)match.Value[0]).ToString("x4");
}

public static string EncodeUTF8(string unescaped)
{
    return ReplacerRegex.Replace(unescaped, Replace);
}

我不建议(除非你有几十次替换)。我认为它会更慢,更大写。