5

我正在使用 Sabre Web 服务 (SabreCommandLLSRQ) 为低票价重新预订构建 ac# 概念验证。

我现在正在打一些特殊的军刀字符,我不知道它们在 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();
}
4

3 回答 3

5

当你想在你的 XML 中插入特殊的 Sabre 字符时,这就是我为 Sabre Web Services SabreCommandLLSRQ 服务记录的内容:

<!--Use &#231; for Cross of Lorraine-->
<!--Use &#164; for Change-->
<!--Use &#167; for End Item-->

洛林十字是最常用的一种,但也使用 End Item 和 Change。

于 2017-05-30T19:36:01.660 回答
3

Pj 是正确的。当您在终端窗口中按“Enter”以作为代理发送该命令时,该字符会出现。不要将它包含在您的请求中。

于 2015-11-02T19:13:14.790 回答
0

SabreCommandLLSRQ 响应返回被双重编码字符串损坏(来自 Sabre + 我们的 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 代码页编码都适合最终转换。他们在相同的代码位置有匕首‡ / 日元 ¥ / 货币 ¤ / 节 § 符号:

Sabre 编码之间的对应关系cp1252可以在https://sds.sabre.com/XTRANET_Access/sabre.htm (in ALT Entry) 中看到。

于 2020-03-12T07:56:20.427 回答