Vb.net Sabre Web/.NET-Sabre RecommandLLSRQ响应中的特殊字符未正确传递

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

我使用VB.NET使用Sabre Web服务,主要使用SabreRecommandLLSRQ发送本机Sabre命令。在不使用任何特殊编码的情况下发送特殊字符可以很好地工作,但是当我尝试使用SabreCommandLLSRS的response元素操纵包含Lorraine交叉的任何响应时,如果我在MsgBox中显示字符串或尝试操纵它,所有Lorraine交叉字符都将丢失

如果我将该字符串放入剪贴板,并在记事本++中查看它,字符就在那里,但它们似乎编码不正确——它们以类似“‡”的形式出现。我对unicode编码相当陌生,所以这一切都有点超出我的理解

我尝试使用字符串生成器的替换方法将这些字符更改为可见的字符,但没有效果-有人有办法解决这个问题吗


奇怪的是,其他特殊角色(如“·”)似乎都表现得很好

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#或什么不同,但在我的文本响应中,我得到了字符加上一些我无法破译的东西。