4

たとえば、文字列があります:

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

ĄĆŹ - ćą をショートカットに置き換えるにはどうすればよいですか? その例の文字列の結果は次のようになります。

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

迅速な交換方法はありますか?使いたくない.Replace for each character...

4

1 に答える 1

6

そのような JSON 文字列への変換は、実際には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();
}
于 2013-06-23T13:50:59.417 に答える