我正在使用VB.NET来使用Sabre Web服务,主要使用SabreCommandLLSRQ来发送本机Sabre命令。在没有任何特殊编码的情况下发送特殊字符可以正常工作,但是当我尝试使用SabreCommandLLSRS的Response元素操纵包含洛林十字架的任何响应时,如果我在MsgBox中显示我的字符串或者试图将Lorraine字符串交叉丢失操纵它。
如果我将该字符串推入剪贴板并在Notepad ++中查看,那么字符就在那里,但它们似乎编码不正确 - 它们的来源类似于“‡”。我对unicode编码很新,所以这一切都在我的头上。
我已经尝试使用String Builder的Replace方法将这些字符更改为可见的东西 - 任何人都可以解决这个问题吗?
奇怪的是,其他特殊字符(例如“¤”)似乎很好。答案 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("^", "¥")
无论出于何种原因,字符串替换方法在我用虚拟字符换掉有问题的字符之后才能工作。