2013-06-23 41 views
4

更換Unicode字符我有例如字符串:字符串在C#

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

我怎麼能代替ACZ - CA與他們快捷方式? 結果對於例如字符串應該是:

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

有沒有什麼快速更換方法?我不想使用。替換每個字符...

+0

更換不串..的 – Sayse

+0

可能重複[轉換Unicode字符串來逃脫ASCII字符串(http://stackoverflow.com/問題/ 1615559 /轉換 - unicode-strings-to-escaped-ascii-string) –

+0

謝謝,我也剛剛找到它。問題解決了。 @Sayse我不想使用。更換數百次 – Yozer

回答

4

像這樣轉換爲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(); 
}