为什么在控制台/调试窗口中看不到\ u0092符号-而是对应的符号‘?

时间:2018-07-25 10:53:20

标签: .net unicode

它的启动方式有所不同-我的JSON端点未正确接受某些数据。我开始寻找-原来,如果.Net字符串包含'\ uXXXX'符号-则JSON序列化程序,控制台窗口甚至Visual Studio中的调试窗口都无法理解它。但是,如果我将\ uXXXX表示法替换为实际的符号-那么一切都会开始起作用。

示例:\u0092等于-根据https://www.charbase.com/0092-unicode-private-use-two

如果我运行以下代码:

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));

}

输出为

enter image description here

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

test
"test"
test’
"test’"

但是为什么输出不相同?我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

好的,问题已解决。原来,列是latin1_swedish_ci归类-它使用扩展的ascii符号(例如为146)-.Net转换为unicode符号-\u0092-但这不是有效的代码。最终解决方案的灵感来自this SO answer

res = Encoding.GetEncoding(1252).GetString(res.Select(c => (byte) c).ToArray());