代码之家  ›  专栏  ›  技术社区  ›  avs099

为什么在console/debug窗口中\u0092符号不可见,但它的对应符号是?

  •  0
  • avs099  · 技术社区  · 7 年前

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

    示例: \u0092 equals to -according to https://www.charbase.com/0092 unicode private use two

    如果我运行此代码:

    void main())
    {
    var s=“测试\u0092”;
    console.writeline;
    console.writeline(jsonconvert.serializeobject));
    
    s=s.replace('\u0092','');
    console.writeline;
    console.writeline(jsonconvert.serializeobject));
    
    }
    < /代码> 
    
    

    输出将是

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

    < PRE> <代码>测试 “测试” 测试 “测试” < /代码>

    但为什么输出不相同呢?我这里缺什么?

    例子:\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 回复  |  直到 7 年前
        1
  •  0
  •   avs099    7 年前

    好的,问题解决了。结果,列在 latin1_swedish_ci 排序规则-它使用扩展的ASCII符号(例如146用于 ’ )-哪个.NET转换成Unicode符号- \u0092 -但这不是有效的代码。最终解决方案的灵感来自 this SO answer :

    res = Encoding.GetEncoding(1252).GetString(res.Select(c => (byte) c).ToArray());
    
    推荐文章