使用C#,我從.ascx頁面獲取TextBox.Text
值。當我比較LINQ查詢中的值與常規字符串對象的相等性時,它總是返回false。C# - 比較不同編碼的字符串
我得出結論,他們是不同的編碼,但迄今沒有轉換或比較它們的運氣。當表示爲文本,但比較byte[]
它們是由於編碼明顯不同
docname = "Testdoc 1.docx"; //regular string created in C#
fetchedVal = ((TextBox)e.Item.FindControl("txtSelectedDocs")).Text; //UTF-8
上述兩個字符串相同。
我已經嘗試了很多不同的東西,如:
System.Text.Encoding.Default.GetString(utf8.GetBytes(fetchedVal));
而是將返回值"Testdoc 1.docx"
。
如果我不是嘗試
System.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes(fetchedVal));
返回"Testdoc 1.docx"
而是Equals()
-check仍然返回false
。
我也曾嘗試以下,這似乎是推薦的方法,但沒有運氣:
byte[] utf8Bytes = Encoding.UTF8.GetBytes(fetchedVal);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Bytes);
string fetchedValConverted = Encoding.Unicode.GetString(unicodeBytes);
的罪魁禍首似乎是空白的,因爲檢查的字節序列時,它總是在第七字節這是不同的。
如何正確地從UTF-8轉換爲C#中的默認字符串編碼?
我不確定這裏的問題究竟是什麼,但我想指出你的字符串的Normalize函數。不知道這是否能解決您的問題,但在比較它們之前對字符串進行規範化可能很有用。 http://msdn.microsoft.com/en-us/library/system.string.normalize(v=vs.110).aspx – 2014-09-29 15:33:11
請參閱@SLaks的答案,這與編碼無關。在.NET中,所有字符串都是相同的,即以UTF-16編碼的Unicode。這裏的罪魁禍首是一個不間斷的空間,請參閱[HTML編碼問題 - 「Â」字符而不是「 」](http://stackoverflow.com/questions/1461907/html-encoding-issues-%C3% 82個字符的表示式 - 代替-的-NBSP)。您的文本框中的文本粘貼到哪裏,輸出如何? – CodeCaster 2014-09-29 15:36:18
就像對@DavidS。的迴應一樣,我也探索過'Normalize'函數,但沒有成功。 @CodeCaster,'TextBox.Text'是從JQuery中設置的。我錯過了它可能是由於這個事實! – 2014-09-29 16:28:08