簡體   English   中英

C# - 比較不同編碼的字符串

[英]C# - Comparing strings of different encodings

使用C#,我從.ascx頁面獲取TextBox.Text值。 當我將值的相等性與LINQ查詢中的常規字符串對象進行比較時,它總是返回false。

我得出的結論是,它們的編碼方式不同,但到目前為止還沒有轉換或比較它們的運氣。

docname = "Testdoc 1.docx"; //regular string created in C#
fetchedVal = ((TextBox)e.Item.FindControl("txtSelectedDocs")).Text; //UTF-8

當表示為文字時,上述兩個字符串是相同的,但是比較byte[] ,由於編碼,它們明顯不同。

我嘗試了很多不同的東西,比如:

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#中的默認字符串編碼?

字符串沒有編碼或字節數組。 編碼只有在將字符串轉換為字節數組時才會發揮作用; 你只能通過指定用於選擇字節的編碼來實現。

聽起來你實際上只是在你的字符串中有不同的字符。 您可能在其中一個中有一個不可見的字符,或者它們可能具有看起來相同的不同字符。

要找到答案,請查看每個字符串中每個字符的Unicode代碼點值(例如, (int) str[0] )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM