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 ç for Cross of Lorraine-->
<!--Use ¤ for Change-->
<!--Use § 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 代码页编码都适合最终转换。他们在相同的代码位置有匕首‡ / 日元 ¥ / 货币 ¤ / 节 § 标志:
- https://en.wikipedia.org/wiki/Windows-1252
- https://en.wikipedia.org/wiki/ISO/IEC_8859-1 - 没有定义 dagger ‡,所以我们需要
cp1252
.
- https://andreypolyak.github.io/sabre-apis-ru/commands.html
Saber编码与cp1252
的对应关系见https://sds.sabre.com/XTRANET_Access/sabre.htm(在ALT Entry
)
我正在使用 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 ç for Cross of Lorraine-->
<!--Use ¤ for Change-->
<!--Use § 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 代码页编码都适合最终转换。他们在相同的代码位置有匕首‡ / 日元 ¥ / 货币 ¤ / 节 § 标志:
- https://en.wikipedia.org/wiki/Windows-1252
- https://en.wikipedia.org/wiki/ISO/IEC_8859-1 - 没有定义 dagger ‡,所以我们需要
cp1252
. - https://andreypolyak.github.io/sabre-apis-ru/commands.html
Saber编码与cp1252
的对应关系见https://sds.sabre.com/XTRANET_Access/sabre.htm(在ALT Entry
)