Saber 特殊字符

Sabre special characters

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

我现在正在打一些特殊的军刀字符,我不知道它们在 c# 中是什么。我有一些正在工作,但我肯定会遇到更多 - 有人有 c# 的 saber 字符映射吗?

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();
}

Pj 是正确的。当您在终端 window 中点击 'Enter' 以作为代理人发送该命令时,该字符就会出现。不要将其包含在您的请求中。

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

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

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

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

Saber编码与cp1252的对应关系见https://sds.sabre.com/XTRANET_Access/sabre.htm(在ALT Entry