2016-03-04 6 views
2

Я использую VB.NET для использования веб-служб Sabre, в основном используя SabreCommandLLSRQ для отправки собственных команд Sabre. Отправка специальных символов без специальной кодировки работает нормально, но когда я пытаюсь манипулировать любым ответом, содержащим Cross of Lorraine, используя элемент Response из SabreCommandLLSRS, все символы Cross of Lorraine отсутствуют, если я показываю свою строку в MsgBox или пытаюсь манипулировать им.Sabre Web/.NET - специальные символы в SabreCommandLLSRQ Ответ не передан должным образом

Если я вставляю эту строку в свой буфер обмена и просматриваю ее в Notepad ++, символы там, но они, похоже, неправильно закодированы - они проходят через нечто вроде «Â ‡». Я довольно новичок в кодировке unicode, так что все это немного выше моей головы.

Я попытался использовать метод «Заменить» String Builder, чтобы изменить эти символы на что-то видимое безрезультатно - у кого есть способ обойти эту проблему?

Странно, что другие специальные символы (например, «¤»), кажется, проходят через отлично.

ответ

2

В этом разделе в Dev Studio, включает в себя ссылку на специальные символы шестнадцатеричных кодов: https://developer.sabre.com/docs/read/soap_apis/management/utility/Send_Sabre_Command

Поможет ли это?

+0

Это несколько полезно, но я странно не имею проблем с отправкой специальных символов, только получая их. Я не знаю, обрабатывает ли VB.NET их иначе, чем C# или что, но в моих текстовых ответах я получаю символ Â плюс еще что-то, что я не могу расшифровать. – drtrobridge

2

Это боль взади из-за невидимых персонажей.

Строка заменить делает работу вам просто нужно, чтобы убедиться, что вы захватить невидимый символ после Â

Просто в функции SabreCommandSend, прежде чем отправить строку Saber положить что-то вроде ниже.

Надеюсь, это должно скопировать и вставить прямо, включая невидимый персонаж.

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

Невозможно скопировать невидимый символ из приведенного выше. Я считаю, что я сериализую XML-вывод в строку и вставлял его в блокнот, а затем, если вы выделите Â и удерживаете shift и щелкните стрелку вправо, а затем ctrl-c, вы можете скопировать невидимый символ в строку замены. –

+0

Странно, я могу отправить специальные символы просто отлично - он читает их в ответах, с которыми у меня проблема. Если бы я мог понять, что заменить фактические персонажи, я думаю, что это может сработать, но я не могу понять, что такое второй символ после Â. Поскольку я использую неотработанный текстовый ответ, а не XML, я просто не могу понять, как захватить и заменить этот конкретный символ. – drtrobridge

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

по какой-то причине, строковый метод замены работает после того, как я поменять обижая байты с фиктивным характером, но не раньше.