Vb.net Sabre Web/.NET-Sabre RecommandLLSRQ响应中的特殊字符未正确传递
我使用VB.NET使用Sabre Web服务,主要使用SabreRecommandLLSRQ发送本机Sabre命令。在不使用任何特殊编码的情况下发送特殊字符可以很好地工作,但是当我尝试使用SabreCommandLLSRS的response元素操纵包含Lorraine交叉的任何响应时,如果我在MsgBox中显示字符串或尝试操纵它,所有Lorraine交叉字符都将丢失 如果我将该字符串放入剪贴板,并在记事本++中查看它,字符就在那里,但它们似乎编码不正确——它们以类似“‡”的形式出现。我对unicode编码相当陌生,所以这一切都有点超出我的理解 我尝试使用字符串生成器的替换方法将这些字符更改为可见的字符,但没有效果-有人有办法解决这个问题吗Vb.net Sabre Web/.NET-Sabre RecommandLLSRQ响应中的特殊字符未正确传递,vb.net,soap,special-characters,sabre,Vb.net,Soap,Special Characters,Sabre,我使用VB.NET使用Sabre Web服务,主要使用SabreRecommandLLSRQ发送本机Sabre命令。在不使用任何特殊编码的情况下发送特殊字符可以很好地工作,但是当我尝试使用SabreCommandLLSRS的response元素操纵包含Lorraine交叉的任何响应时,如果我在MsgBox中显示字符串或尝试操纵它,所有Lorraine交叉字符都将丢失 如果我将该字符串放入剪贴板,并在记事本++中查看它,字符就在那里,但它们似乎编码不正确——它们以类似“‡”的形式出现。我对unic
奇怪的是,其他特殊角色(如“·”)似乎都表现得很好 Dev Studio中的这一部分包括对特殊字符十六进制代码的引用:
这有帮助吗?由于看不见的角色,这是一种后遗症 字符串替换确实有效,您只需确保捕获字符串后面的不可见字符 在将字符串发送到Sabre之前,只需在SabreRecommandSend函数中放入如下内容 希望这应该直接复制和粘贴,包括不可见的字符
if (tempCommand.Contains("‡"))
{
tempCommand = tempCommand.Replace("‡", "Â");
}
我想出了如何让它工作,但它并不漂亮,所以如果有人有更好的方法,我洗耳恭听 我不知道使用什么字符来执行简单的字符串替换方法,因此我将字符串转换为字节数组,遍历数组并替换我找到的任何奇怪字符,将字节数组重新转换为原始字符串,并对其执行字符串替换:
Imports System.Text
Dim byteArray() As Byte = System.Text.Encoding.ASCII.GetBytes(sabreResponse)
For i = 0 To byteArray.Length - 1
If byteArray(i) = 63 Then 'this is a question mark char
byteArray(i) = 94 'caret that doesn't exist in native Sabre
End If
Next
MyClass.respString = System.Text.ASCIIEncoding.ASCII.GetString(byteArray)
MyClass.respString = MyClass.respString.Replace("^", "¥")
无论出于何种原因,stringreplace方法在我用一个伪字符替换出有问题的字节之后工作,但在这之前不行 不,不可见字符不能从上面复制。我相信我将XML输出序列化为一个字符串并将其粘贴到记事本中,然后如果您突出显示并按住shift键并单击右箭头,然后按住ctrl-c键,您可以将不可见的字符复制到替换字符串中。奇怪的是,我可以很好地发送特殊字符-在我遇到问题的响应中读取它们。如果我能弄清楚实际要替换的字符是什么,我想这可能行得通,但我不能弄清楚后面的第二个字符是什么。因为我使用的是原始文本响应,而不是XML,所以我似乎不知道如何捕获和替换该特定字符。这有点帮助,但奇怪的是,我在发送特殊字符时没有问题,只是接收它们。我不知道VB.NET处理它们的方式是否与C#或什么不同,但在我的文本响应中,我得到了字符加上一些我无法破译的东西。