2010-04-18 65 views
17

我需要一個WPF控件上的文本框,它可以像文本Commit\r\n\r(這是.net字符串"Commit\\r\\n\\r")並將其轉換回"Commit\r\n\r"作爲.net字符串。我希望有一個string.Unescape()和string.Escape()方法對,但它似乎並不存在。我將不得不寫我自己的?還是有更簡單的方法來做到這一點?如何在.net中使用Unescape和Reescape字符串?

+1

不要在文本框中輸入,只需按Enter鍵。 – 2010-04-18 04:49:28

+0

如果他們想說\ r \ n \ r \ r? (是的,這是這種特定型號的可行情況) – Firoso 2010-04-18 04:55:46

+5

選中此項:http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/08bb20a2-82b9-4f2f-9f1a-994961fbecc3/ – 2010-04-18 05:09:49

回答

6

漢斯的代碼,改進版本。

  1. 製造它使用StringBuilder - 一個真正的性能助推器的長字符串
  2. 使其成爲一個擴展方法

    public static class StringUnescape 
    { 
        public static string Unescape(this string txt) 
        { 
         if (string.IsNullOrEmpty(txt)) { return txt; } 
         StringBuilder retval = new StringBuilder(txt.Length); 
         for (int ix = 0; ix < txt.Length;) 
         { 
          int jx = txt.IndexOf('\\', ix); 
          if (jx < 0 || jx == txt.Length - 1) jx = txt.Length; 
          retval.Append(txt, ix, jx - ix); 
          if (jx >= txt.Length) break; 
          switch (txt[jx + 1]) 
          { 
           case 'n': retval.Append('\n'); break; // Line feed 
           case 'r': retval.Append('\r'); break; // Carriage return 
           case 't': retval.Append('\t'); break; // Tab 
           case '\\': retval.Append('\\'); break; // Don't escape 
           default:         // Unrecognized, copy as-is 
            retval.Append('\\').Append(txt[jx + 1]); break; 
          } 
          ix = jx + 2; 
         } 
         return retval.ToString(); 
        } 
    } 
    
+0

FYI列出的函數名稱錯誤 - 它是/ unescaping /一個字符串,但被稱爲EscapeStringChars()。 – redcalx 2012-06-25 13:27:26

35
System.Text.RegularExpressions.Regex.Unescape(@"\r\n\t\t\t\t\t\t\t\t\tHello world!") 

Regex.Unescape method documentation

+6

System.Text.RegularExpressions.Regex.Unescape() – Dragouf 2011-06-30 13:55:58

+9

請注意,這是'Regex'特有的,並且像'@「\ [」'轉換爲'@「[」'這樣的字符串只是在我們談論正則表達式,不是一個正常的字符串。 – Silvermind 2014-05-02 11:17:03

2

以下方法同javascript轉義/ unescape功能:

Microsoft.JScript.GlobalObject.unescape(); 

Microsoft.JScript.GlobalObject.escape();