在C#中替换字符串中的Unicode字符

4

我有一个字符串,例如:

string str = "ĄĆŹ - ćwrą";

我该如何使用快捷方式替换 ĄĆŹ - ćą?对于这个示例字符串的结果应该是:

str = "\u0104\u0106\u0179 \u2013 \u0107wr\u0105"

有没有更快的替换方法?我不想为每个字符使用.Replace...

替换字符串使用 Replace 函数。 - Sayse
可能是重复的问题:将Unicode字符串转换为转义的ASCII字符串 - Matthew Watson
谢谢,我也刚刚找到了。问题解决了。@Sayse 我不想使用.Replace 函数数百次。 - Yozer
1个回答

8

将其转换为JSON字符串比应该更加繁琐,主要是因为您需要处理Unicode代码点,实际上意味着需要调用char.ConvertToUtf32。为了做到这一点,您需要以某种方式处理代理对; System.Globalization.StringInfo可以帮助解决这个问题。

下面是一个使用这些构建块执行转换的函数:

string str = "ĄĆŹ - ćwrą";

public string ToJsonString(string s)
{
    var enumerator = StringInfo.GetTextElementEnumerator(s);
    var sb = new StringBuilder();

    while (enumerator.MoveNext())
    {
        var unicodeChar = enumerator.GetTextElement();
        var codePoint = char.ConvertToUtf32(unicodeChar, 0);
        if (codePoint < 0x80) {
            sb.Append(unicodeChar);
        }
        else if (codePoint < 0xffff) {
            sb.Append("\\u").Append(codePoint.ToString("x4"));
        }
        else {
            sb.Append("\\u").Append((codePoint & 0xffff).ToString("x4"));
            sb.Append("\\u").Append(((codePoint >> 16) & 0xffff).ToString("x4"));
        }
    }

    return sb.ToString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接