keycode(15)c#代表的char是什么?

What is the char represented by keycode (15) c#?

我有一个字符串,它是使用 EF 通过视图从 SQL 数据库中提取的。 字符串样本是 "mystring",长度为 8。 当我将此字符串与 "mystring" 进行比较时,我得到 "false".

我已将字符串转换为(字节)数组:

("mystring").Select(m=>(byte)m).ToArray();

我看到我在数组末尾有一个带有键码“15”的额外字符。

我到处查看键码“15”是什么,但在键码表中没有看到它。

我的问题是:

  1. “15”表示的char转换成byte是什么?

  2. 为什么要添加到字符串中? (这是我的用户可以通过管理屏幕更改的字符串)

补充:它不会每次都发生,只有(现在)一个字符串。

编辑:我将该字符串的粘贴部分复制到立即 window,以检查长度,我得到长度 = 2

这是字符串:

"a‏".Length 
2

该字符串UF8中的GetBytes为:

{byte[4]}
[0]: 97
[1]: 226
[2]: 128
[3]: 143

第2个char的int值(我眼里不存在)是:

var intvalue = (int)test[1];
8207

更新:现在,当我检查那个 "a" 字符串上的元素时,我在看到 "a&rlm" 之前复制粘贴 --> 它是什么以及我如何摆脱它?

.NET 中的 char 而不是 byte。您从 stringbyte 数组的转换存在缺陷。

您需要使用 GetBytes 以您选择的编码获取字节。

您的字符可能不是代码为 15 的 ASCII 字符,而是值为 XX0FUnicode 字符。当您将 unicode 字符转换为 byte 时,您会丢失 "upper" 字节,因为 unicode 字符是两个字节。

我不知道这如何适用于您的 "mystring" 比较,但我怀疑您正在寻找以一个字符结尾的内容并获得以另一个字符结尾的内容。我不是文化方面的专家,所以也许对文化敏感的搜索是合适的?

请注意 任何 0F 结尾的 unicode 字符将导致值 15。这是前 15 个:

010f ď 
020f ȏ 
030f ̏ 
040f Џ 
050f ԏ 
060f ؏ 
070f ܏ 
080f ࠏ 
090f ए 
0a0f ਏ 
0b0f ଏ 
0c0f ఏ 
0d0f ഏ 
0e0f ฏ 
0f0f ༏ 

在 HTML 来源中查看问题中的字符串,它被写为 a‏。快速 google 表明 rlm 是从左到右的标记,它是 unicode U+200F (http://en.wikipedia.org/wiki/Right-to-left_mark).

将此与其他人的观察相结合,即强制转换为字节只留下最后一个字节解释了为什么你得到 0F = 15 作为你的字节数。

这是从哪里来的是你调查的东西,但我想它来自原始用户输入(即用户从右到左输入文本)。