2012-02-28 125 views
2

我在这里看到类似的答案,但没有一个是我需要的。如何将控制字符附加到c#中的字符串?

我想串消息与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(); 

消息的接收者在块的开始和结尾都看不到控制字符,我不确定编码是错误的。任何帮助将不胜感激。我不知道如何以正确的格式复制代码,所以请原谅格式的问题;)

谢谢。

Greg

+0

你可以调试函数,看'myMessage'是否有控制字符吗? – Jason 2012-02-28 20:08:07

+1

你究竟是如何发送字符串的? – 2012-02-28 20:10:03

+0

您可以使用标准转义码而不是键码的十六进制数字。 '\ b \ r \ n'请参阅http://msdn.microsoft.com/zh-cn/library/aa691087(v=vs.71).aspx – Jason 2012-02-28 20:13:08

回答

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 }); 
+0

或者要迂回,UTF-16。你有一点,但;我们不知道字符串是如何发送的。 – 2012-02-28 20:09:37

+0

伙计们,我真的很感激快速的回应。消费者也建议使用ASCII字节数组,但我仍然坚持为什么我无法获得控制字符。我将按照建议调试该功能。有趣的是,只要询问消费者是否期待Unicode,我也注意到了我的代码中的其他问题。我必须去关注一些数字,我会重新发布我的发现。我已经使用了多年的代码,但这是我为外部公司构建的第一个接口,它不是最简单的项目;)再次感谢您的即时答复。 – 2012-02-28 20:40:45

+0

谢谢各位...... ASCII字节数组完美解决。我们现在(当然)有一个新问题,我在上面的问题中添加了这个问题,但是我将在“截断的套接字消息”标题下作为新主题发布。非常感谢。 – 2012-02-29 18:46:23