Sabre Web / .NET - SabreCommandLLSRQ中的特殊字符响应未正确处理

时间:2016-03-04 20:29:37

标签: vb.net soap special-characters sabre

我正在使用VB.NET来使用Sabre Web服务,主要使用SabreCommandLLSRQ来发送本机Sabre命令。在没有任何特殊编码的情况下发送特殊字符可以正常工作,但是当我尝试使用SabreCommandLLSRS的Response元素操纵包含洛林十字架的任何响应时,如果我在MsgBox中显示我的字符串或者试图将Lorraine字符串交叉丢失操纵它。

如果我将该字符串推入剪贴板并在Notepad ++中查看,那么字符就在那里,但它们似乎编码不正确 - 它们的来源类似于“‡”。我对unicode编码很新,所以这一切都在我的头上。

我已经尝试使用String Builder的Replace方法将这些字符更改为可见的东西 - 任何人都可以解决这个问题吗?

奇怪的是,其他特殊字符(例如“¤”)似乎很好。

3 个答案:

答案 0 :(得分:2)

Dev Studio中的此部分包含对特殊字符十六进制代码的引用: https://developer.sabre.com/docs/read/soap_apis/management/utility/Send_Sabre_Command

这有帮助吗?

答案 1 :(得分:2)

由于看不见的角色,这是背后的痛苦。

字符串替换确实有效,您只需要确保在Â

之后捕获不可见的字符

在您将字符串发送到Sabre之前,只需在SabreCommandSend函数中输入如下内容。

希望这应该直接复制并粘贴,包括隐形字符。

  if (tempCommand.Contains("‡"))
                        {
                            tempCommand = tempCommand.Replace("‡", "Â");
                        }

答案 2 :(得分:0)

我想出了如何让它发挥作用,但它不是很好,如果有人有更好的方法去做,我全都听见了。

我无法弄清楚用什么字符串来做简单的字符串替换方法,所以相反我将字符串转换为字节数组,遍历数组并替换我找到的任何奇怪的字符,重新编写字节数组转换为原始字符串并在其上执行字符串替换:

    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("^", "¥")

无论出于何种原因,字符串替换方法在我用虚拟字符换掉有问题的字符之后才能工作。