为什么/如何函数 string.Substring 将“\u0002”视为一个符号? C#

问题描述

为什么/如何函数 string.Substring 将“\u0002”视为一个符号? 我的意思是,“\u0002”是一个“字符”STX。

  1. \u 表示这是 unicode
  2. C# 中的字符和字符串处理使用 Unicode 编码。 char 类型表示一个 UTF-16 编码单元,string 类型表示一个 UTF-16 编码单元序列。

代码检查前缀是否正确。数据长度无关紧要。 前缀是 STX ,后缀是 ETX 添加的数据字符串。 毫无疑问,如何明确地执行此操作(下面的代码)?

    string stx = "\u0002";
    string etx = "\u0003";
    string ReceivedData= stx + "1122334455" + etx;
    
    string prefix = ReceivedData.Substring(0,1);
    string suffix = ReceivedData.Substring(ReceivedData.Length - 1,1);

解决方法

你想知道 UTF-16 和 Unicode 的工作机制吗?可能这个话题有帮助: What is Unicode,UTF-8,UTF-16?

代码片段看起来很合理,因为变量被显式命名并且“\u”是 Unicode 的标志。

string stx = "\u0002";
string etx = "\u0003";

string prefix = ReceivedData.Substring(0,1);
string suffix = ReceivedData.Substring(ReceivedData.Length - 1,1);