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 转换为默认字符串编码?
字符串
没有编码或字节数组。 编码仅在将字符串转换为字节数组时才起作用;只能通过指定用于选取字节的编码来执行此操作。
听起来你实际上只是在你的字符串中有不同的字符。 您可能在其中之一中具有不可见字符,或者它们可能具有看起来相同的不同字符。
要找出答案,请查看每个字符串中每个字符的 Unicode 代码点值(例如,(int) str[0]
(。