我有一个字符串,它通过视图使用EF从SQL数据库中提取。 string sample是“mystring”,长度为8。 当我将这个字符串与“mystring”进行比较时,我得到了“假”。
我已将字符串转换为(byte)数组:
var result = dataContext.table.GroupBy(m => m.category)
.SelectMany(g => g.OrderByDescending(x => x.Id).Take(10));
我看到我在阵列的末尾有一个额外的char,键码为“15”。
我在任何地方看到了什么是键码'15',我没有在键码表中看到它。
我的问题是:
转换为字节时,“15”表示的字符是什么?
为什么要添加到字符串中? (这是我的用户可以使用管理员屏幕更改的字符串)
补充说:它不会每次都发生,只有(现在)一个字符串。
编辑:我将该字符串的一部分粘贴到立即窗口,检查长度,我得到长度= 2
这是字符串:
("mystring").Select(m=>(byte)m).ToArray();
此字符串的UF8中的GetBytes是:
"a".Length
2
第二个字符的int值(我眼中不存在)是:
{byte[4]}
[0]: 97
[1]: 226
[2]: 128
[3]: 143
更新:现在当我检查“a”字符串上的元素时,我会在看到“a& rlm” - >之前复制粘贴。它是什么以及我如何摆脱它?
答案 0 :(得分:4)
答案 1 :(得分:3)
您的角色可能不是代码为Uri
的ASCII字符,而是 Unicode 字符,其值为15
。将unicode字符强制转换为XX0F
时,由于unicode字符为两个字节,因此丢失了“高”字节。
我不知道这对你的byte
比较有什么影响,但我怀疑你正在寻找以一个角色结尾的东西,并以另一个角色结束。我不是文化专家,所以也许文化敏感的搜索是合适的?
请注意,以"mystring"
结尾的任何 unicode字符都会导致0F
的值。这是第15个:
15
答案 2 :(得分:3)
在HTML源代码中查看问题中的字符串,将其写为a‏
。一个快速的谷歌显示rlm是从左到右的标记,它是unicode U + 200F(http://en.wikipedia.org/wiki/Right-to-left_mark)。
将此与其他人的观察结果相结合,即铸造到字节只留下最后一个字节解释为什么你得到0F = 15作为你的字节数。
这来自哪里可供您调查,但我想它来自原始用户输入(即用户从右向左输入文本)。