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

本文关键字:编码 字符串 比较 | 更新日期: 2023-09-27 18:24:55

使用 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 转换为默认字符串编码?

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

字符串

没有编码或字节数组。 编码仅在将字符串转换为字节数组时才起作用;只能通过指定用于选取字节的编码来执行此操作。

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

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