如何将控制字符附加到c#中的字符串?

时间:2012-02-28 19:58:03

标签: c# string sockets character-encoding

我在这里看到类似的答案,但没有一个是我需要的。

我正在尝试构建套接字确认,其中字符串消息以0B控制字符开头,并且在事务结束时同时包含十六进制1C和十六进制0D

StringBuilder sb = new StringBuilder();
char b = '\u000b'; 
char c = '\u001c';
char d = '\u000d';
sb.Append(b);
sb.AppendLine(ackMessage);
sb.Append("MSA|AA|" + controlID);
sb.Append(c);
sb.Append(d);
string myMessage = sb.ToString();

消息的接收者没有在块的开头和结尾看到控制字符,我不确定我编码错误的位置。任何帮助将不胜感激。我不知道如何以适当的格式复制代码,所以请原谅这个问题的格式化;)

感谢。

格雷格

1 个答案:

答案 0 :(得分:4)

.NET中的字符串和字符是Unicode。您的消费者是否期望使用Unicode?也许您需要创建/传递ASCII字节数组?

    byte[] unicodeBytes = Encoding.Unicode.GetBytes(ackMessage);
    var asciiBytes = new List<byte>(ackMessage.Length + 3);
    asciiBytes.Add(0x0b);
    asciiBytes.AddRange(Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes));
    asciiBytes.AddRange(new byte[] { 0x1c, 0x0d });