C#中如何检测Encoding.Unicode.GetBytes()返回字节数组中的DEL字符?
关于Unicode中DEL字符的表示及检测方法
嘿,刚好碰到过类似的场景,给你详细捋一捋:
首先,DEL字符的Unicode码点是U+007F,和ASCII里的DEL完全一致——Unicode兼容所有ASCII的0-127字符,码点是一一对应的。
但关键在于你用Encoding.Unicode(.NET里这个其实是UTF-16小端字节序)编码时,这个字符会被转换成两个字节:0x7F 0x00(也就是十进制的127和0)。因为UTF-16对BMP范围内的字符(U+0000到U+FFFF)都是用两个字节存储,小端模式下低字节在前。
检测方法推荐
直接检测字节数组需要注意字节序,更可靠的方式是先解码成字符串再检查:
// 先把字节数组解码为Unicode字符串 string chatContent = Encoding.Unicode.GetString(yourByteArray); // 检查是否包含DEL字符 bool hasDelCharacter = chatContent.Contains('\u007F');
如果因为性能原因不想解码整个数组,也可以直接在字节数组里查找连续的127和0:
bool hasDel = false; for (int i = 0; i < yourByteArray.Length - 1; i++) { if (yourByteArray[i] == 127 && yourByteArray[i+1] == 0) { hasDel = true; break; } }
额外提醒:如果你的聊天程序后续有可能切换到其他Unicode编码(比如UTF-8),DEL字符在UTF-8里还是单字节0x7F,所以解码后检查'\u007F'的方式兼容性更好,不用改逻辑。
内容的提问来源于stack exchange,提问作者user9648480
相关产品推荐
相关产品推荐

