C# - 比较不同编码的字符串

时间:2014-09-29 15:29:34

标签: c# string encoding

使用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() - 检查仍会返回false

我也试过以下,这似乎是推荐的方法,但没有运气:

byte[] utf8Bytes = Encoding.UTF8.GetBytes(fetchedVal);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Bytes);
string fetchedValConverted = Encoding.Unicode.GetString(unicodeBytes);

罪魁祸首似乎是空白,因为在检查字节序列时,它始终是不同的第七个字节。

如何在C#中将UTF-8正确转换为默认字符串编码?

1 个答案:

答案 0 :(得分:6)

字符串没有编码或字节数组。编码只有在将字符串转换为字节数组时才会发挥作用;你只能通过指定用于选择字节的编码来实现。

听起来你实际上只是在你的字符串中有不同的字符。您可能在其中一个中有一个不可见的字符,或者它们可能具有看起来相同的不同字符。

要找到答案,请查看每个字符串中每个字符的Unicode代码点值(例如(int) str[0])。