C#-比较不同编码的字符串
使用C#,我从.ascx页面获取C#-比较不同编码的字符串,c#,string,encoding,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 上述两个
TextBox.Text
值。当我将该值的相等性与LINQ查询中的常规字符串对象进行比较时,它总是返回false
我得出的结论是,它们的编码方式不同,但到目前为止,还没有机会转换或比较它们
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#中的默认字符串编码?字符串没有编码或字节数组。编码仅在将字符串转换为字节数组时起作用;只能通过指定用于拾取字节的编码来实现这一点 听起来好像字符串中有不同的字符。其中一个角色中可能有一个不可见的角色,或者它们可能有看起来相同的不同角色
要找到答案,请查看每个字符串中每个字符的Unicode代码点值(例如,
(int)str[0]
)。我不确定这里到底有什么问题,但我想向您指出字符串的规格化函数。不知道这是否能解决您的问题,但在比较字符串之前对字符串进行规范化可能会很有用。请看@SLaks的回答,这与编码无关。在.NET中,所有字符串都是相等的,即用UTF-16编码的Unicode。这里的罪魁祸首是一个不间断的空间,请参见。文本框中的文本粘贴自何处,如何输出?作为对@DavidS的响应,我也探索了规范化
函数,但没有成功@CodeCaster,从JQuery设置TextBox.Text
。我错过了一个事实,那就是它可能是由于那!这似乎很有道理,我会在早上第一件事调查它!这就是问题所在。不知何故,一个空白字符( ;
,U+0020
)实际上是一个不间断的空格( ;
)。