2013-02-11 320 views
1

當從stringbuilder將字符串轉換爲字符串時,出現問題。 的問題類似於this issue但略有不同:c#stringbuilder tostring雙引號問題

這是我的代碼簡化:

StringBuilder sb = new StringBuilder(); 
sb.Append("\""); 
sb.Append("Hello World"); 
sb.Append("\""); 

string test = sb.ToString(); 

現在在調試器中的SB值:

"Hello World" 

在調試器中測試串值更改爲:

\"Hello World\" 

當返回測試字符串值返回給瀏覽器的velue仍然逃脫:

\"Hello World\" 

我已經嘗試使用的字符串替換:

test = test.Replace("\"", ""); 

沒有運氣,我試圖追加ASCII字符,而不是\」我也嘗試了不同的追加

sb.Append('"'); 

所有這些,沒有運氣。有人可能會指出我爲什麼我仍然得到逃生角色以及如何擺脫它的正確方向。

非常感謝和讚賞任何輸入。

+0

請參閱http://stackoverflow.com/questions/1928909/in-c-can-i-escape-a-double-quote-in-一個字面字符串 – hatchet 2013-02-11 18:43:04

+0

嗨,使用@「」「」沒有區別。當我使用sb.Append(@「」「」);所產生的刺仍然包含「in」 – user281921 2013-02-11 19:05:03

+0

我也通過在IE中打開URL並保存到磁盤來測試輸出結果在記事本中打開後,轉義斜槓仍然存在,所以它不是調試器或手錶的100%問題 – user281921 2013-02-11 19:13:01

回答

1

好吧,似乎在WCF的StringBuilder會自動添加換碼引號。這意味着你無法擺脫這一點。我也正在談論這一切都是錯誤的。我試圖返回一個字符串,我應該返回一個序列化的JSON對象。

0

我沒有看到您描述的行爲。用反斜槓轉義雙引號應該可以工作。代碼

 var sb = new StringBuilder(); 
     sb.Append("Ed says, "); 
     sb.Append("\""); 
     sb.Append("Hello"); 
     sb.Append("\""); 
     Console.WriteLine(sb.ToString()); 
     foreach (char c in sb.ToString()) Console.Write(c + "-"); 
     Console.ReadKey(); 

下面的代碼片段產生

Ed says, "Hello" 
E-d- -s-a-y-s-,- -"-H-e-l-l-o-"- 

如果你在你的字符串的最後顯示,可以通過StringBuilder的和toString代碼之後的東西來獲取添加得到實際的反斜槓字符。

+0

好吧我不能做一個ConsoleWrite,因爲它是Web服務,但我已經完成了一個StreamWriter到一個本地文件,輸出很好,沒有轉義字符,這引出了問題,爲什麼瀏覽器窗口中顯示的數據包含轉義字符 – user281921 2013-02-11 19:38:38

+0

@Pete我得看看你是如何將字符串輸出到你的HTML中的,一般來說,雙引號必須編碼爲'"'。可能問題在於你沒有使用類似Html.Encode()的方式編碼你的字符串。在這種情況下,你應該用'"'而不是雙引號字符來構建你的字符串。 – hatchet 2013-02-11 19:45:05

+0

嘗試了",但直接轉換爲該字符串。 html.encode仍然產生轉義字符 – user281921 2013-02-13 15:52:56

0

您可以在字符串前使用逐字串字符串「@」,然後輸入兩次引號。這刪除了在字符串序列中使用轉義字符:)

StringBuilder sb = new StringBuilder(); 
sb.Append(@""""); 
sb.Append("Hello World"); 
sb.Append(@""""); 

string test = sb.ToString();