.net 为什么\u0092符号在控制台/调试窗口中不可见-但其对应项’;-是

.net 为什么\u0092符号在控制台/调试窗口中不可见-但其对应项’;-是,.net,unicode,.net,Unicode,它以不同的方式启动-我的JSON端点没有正确地接受某些数据。我开始寻找,如果.Net字符串包含“\uxxx”符号,那么JSON序列化程序、控制台窗口甚至Visual Studio中的调试窗口都无法理解它。但是如果我用实际符号替换这个符号,那么一切都开始工作了 示例:\u0092等于”-根据 如果我运行此代码: void Main() { var s = "test\u0092"; Console.WriteLine(s); Console.WriteLine(JsonCo

它以不同的方式启动-我的JSON端点没有正确地接受某些数据。我开始寻找,如果.Net字符串包含“\uxxx”符号,那么JSON序列化程序、控制台窗口甚至Visual Studio中的调试窗口都无法理解它。但是如果我用实际符号替换这个符号,那么一切都开始工作了

示例:
\u0092
等于
-根据

如果我运行此代码:

void Main()
{
    var s = "test\u0092";
    Console.WriteLine(s);
    Console.WriteLine(JsonConvert.SerializeObject(s));

    s = s.Replace('\u0092', '’');
    Console.WriteLine(s);
    Console.WriteLine(JsonConvert.SerializeObject(s));

}
输出将是

或者如果我从控制台复制/粘贴到这里,我会

test
"test"
test’
"test’"

但为什么产出不一样呢?我遗漏了什么?

好的,问题解决了。事实证明,该列位于
latin1\u swedish\u ci
排序规则中,它使用扩展的ascii符号(例如,
'
)将.Net转换为unicode符号-
\u0092
,但这不是有效的代码。最终解决方案的灵感来自:


为什么你认为
\u0092
等同于
'
?您的字符
\u2019
\u0092
是一个未定义的glyph()。@avs099:我不确定我是否明白你的意思
JsonConvert.SerializeObject
似乎只是将您的字符串用引号括起来,但在我看来,它并没有改变……您在读写时是否确实使用了正确的字符编码?ie是您的数据库,它以Unicode格式存储内容,而不是一个单字节字符集或类似的格式,其中92的值可能表示您想要的字符。@Chris:不仅仅是1252,而是所有125X编码。:)顺便说一句,这是
\x92
,而不是
\u0092
。在UTF-8、UTF-16和UTF-32中,单个
0x92
字节是非法的;在UTF-8中,
\u0092
表示为
0xC2 0x92
;在UTF-16LE中,
92 00
。。。它绝不仅仅是Unicode中的
0x92
。是的:)我来自克罗地亚,在1250上度过了很多青春时光。。。然后不妨检查一下其余的P
res = Encoding.GetEncoding(1252).GetString(res.Select(c => (byte) c).ToArray());