我最近需要在 SQL 中对 varbinary 图像执行 isnull 操作。
到目前为止(异常)正常。我很快编写了一个 C# 程序从我的桌面读取文件 no_image.png,并将字节输出为十六进制字符串。
该程序是这样开始的:
byte[] ba = System.IO.File.ReadAllBytes(@"D:\UserName\Desktop\no_image.png");
Console.WriteLine(ba.Length);
// From here, change ba to hex string
由于我之前无数次使用 readallbytes,我觉得没什么大不了的。
令我惊讶的是,我在 ReadAllBytes 上遇到了“NotSupported”异常。
我发现问题是当我右键单击文件时,转到选项卡“安全”,然后复制粘贴对象名称(从右侧开始标记并不准确地向左移动),就会发生这种情况。
而且它只发生在 Windows 8.1(也许是 8)上,但不会发生在 Windows 7 上。
当我输出有问题的字符串时:
public static string ToHexString(string input)
{
string strRetVal = null;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (char c in input)
{
sb.Append(((int)c).ToString("X2"));
}
strRetVal = sb.ToString();
sb.Length = 0;
sb = null;
return strRetVal;
} // End Function ToHexString
string str = ToHexString(@"D:\UserName\Desktop\cookie.png");
string strRight = " (" + ToHexString(@"D:\UserName\Desktop\cookie.png") + ")"; // Correct value, for comparison
string msg = str + Environment.NewLine + " " + strRight;
Console.WriteLine(msg);
我明白了:
202A443A5C557365724E616D655C4465736B746F705C636F6F6B69652E706E67
(443A5C557365724E616D655C4465736B746F705C636F6F6B69652E706E67)
首先,当我在 ascii 中查找 20 2A 时,它是 [space] + *
由于我既没有看到空格也没有看到星星,所以当我 google 20 2A 时,我得到的第一件事是德国刑法的第 202a 段 http://dejure.org/gesetze/StGB/202a.html
但我认为这是一个相当不幸的巧合,它实际上是 unicode 控制字符“从左到右嵌入”(U+202A) http://www.fileformat.info/info/unicode/char/202a/index。 htm
这是一个错误,还是一个功能?
我的猜测是,这是一个错误的功能。