我正在使用Sabre网络服务(SabreCommandLLSRQ)为低票价重新预订构建c#概念证明。
我现在正在打一些特殊的军刀角色,我不知道它们在c#中是什么。我有一些正在工作,但我肯定会遇到更多 - 有没有人有c#的军刀角色映射?
private string BuildPriceLine()
{
const char CHLOR = (char)0xE7; // Cross-of-Lorraine
const char ENDITEM = (char)0xA7; // End Item key
const char CHGKEY = (char)0xA5; // Change Key
var sabreCommand = new StringBuilder();
// WPRQ‡AAA‡UN*C123456‡KP0‡XP«
sabreCommand.Append("WPRQ");
sabreCommand.Append(CHLOR);
sabreCommand.Append("AAA");
sabreCommand.Append(CHLOR);
sabreCommand.Append("UN*C123456");
sabreCommand.Append(CHLOR);
sabreCommand.Append("KP0");
sabreCommand.Append(CHLOR);
sabreCommand.Append("XP");
sabreCommand.Append(WhatSabreCharIsThis); // "«" ?
return sabreCommand.ToString();
}
答案 0 :(得分:3)
Pj是对的。当你点击“输入”时在终端窗口中发送该命令作为代理将出现该字符。请不要将其包含在您的请求中。
答案 1 :(得分:2)
当您想在XML中插入特殊的Sabre字符时,这就是我为Sabre Web Services SabreCommandLLSRQ服务记录的内容:
<!--Use ç for Cross of Lorraine-->
<!--Use ¤ for Change-->
<!--Use § for End Item-->
洛林十字架是最常用的一种,但也使用了最终项目和更改。
答案 2 :(得分:0)
SabreCommandLLSRQ
响应返回由双重编码字符串损坏的结果(来自Saber +我们的Java WS框架)。对于Java我有:
public static String decode(String termRsp) {
try {
String fromUtf8 = new String(termRsp.getBytes("ISO-8859-1"), "UTF-8");
String fromLatin1 = new String(fromUtf8.getBytes("ISO-8859-1"), "windows-1252");
return fromLatin1;
} catch (UnsupportedEncodingException e) {
return termRsp;
}
}
似乎许多Windows代码页编码都可以进行最终转换。它们在相同的代码位置带有匕首‡/日元¥/货币¤/节§符号:
cp1252
。在https://sds.sabre.com/XTRANET_Access/sabre.htm(在cp1252
中可以看到Saber编码与ALT Entry
之间的对应关系。