【问题标题】:How to convert escape characters to ANSI from string in XML如何将转义字符从 XML 中的字符串转换为 ANSI
【发布时间】:2017-06-19 18:13:30
【问题描述】:

当我使用用 C# 编写的 Windows 服务将原始字符串发送到收据打印机时,该收据打印机使用转义序列来启动打印机内的功能。如:

\x1b\x64\x02

操作切纸机。

我在另一台服务器上使用收据模板文件,并将基于 64 位编码的文本放入 XML 以将其提供给 Windows 服务。问题是当从 XML 中提取文本时,文本会按字面意思打印在收据上,这与未翻译的转义字符有关。

我猜当我在 Visual Studio 中键入这些转义序列时,它代表字符串中的 ANSI 字符(因为当我这样做时它会起作用然后切纸机触发)。

我如何将包含转义序列的字符串转换为在 C# Windows 服务中使用的正确格式?目标是将这些简单的转义序列输入到模板文件中,然后在另一端正确转换它们。

我目前正在尝试解码 base 64 然后转换为 ANSI 编码的 C# 代码:

byte[] data = Convert.FromBase64String(content);
content = Encoding.Default.GetString(data);

byte[] utf8Bytes = Encoding.UTF8.GetBytes(content);
content = Encoding.GetEncoding("Windows-1252").GetString(utf8Bytes);

return RawPrinterHelper.SendStringToPrinter(getConfig().receiptPrinter, content);

这是服务收到的测试回执的内容:

XHgxYlx4MWRceDYxXHgxIE1OSG9tZU91dGxldC5jb20yMzAwIFdlc3QgSGlnaHdheSAxMw0KQnVybnN2aWxsZSwgTU4gNTUzMzcNCjk1Mi0yNzktMTU4Nw0KDQpceDFiXHgxZFx4NjFceDBceDFiXHg0NFx4Mlx4MTBceDIyXHgwIERhdGU6IDIwMTctMDYtMTVceDkgVGltZTogMzo0NmFtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KXHgxYlx4NDUgU0FMRSANClx4MWJceDQ2

例如,当我使用 base 64 编码 \x7 时,

  • 来自服务内部:Bw==(ASCII 格式)
  • 从服务内部:BwA=(作为 Unicode)
  • 来自 php 中的字符串:XHg3

【问题讨论】:

  • 我们需要查看一些代码,最好是minimal reproducible example,显示 XML 是如何生成的。话虽如此,根据XmlWriter 支持的XML Standard 1.0 (fourth edition)\x1b\x02 是包含在 XML 文件中的无效 Unicode 字符代码。因此,如果您使用XmlWriter,这些字符可能会被转义。
  • 您可能还想使用\uNNNN 字符文字格式而不是\xNN 格式。由于here 解释的原因,它不太容易出错。
  • 我更新了答案。我已经对收据的内容进行了 base 64 编码,以消除 XML 合规性。
  • 上面的代码显示了您如何解码content 字符串。首先你是如何编码的?
  • 我正在使用 base64_encode 在 PHP 中编码一个字符串。该字符串是呈现的 phtml 文件的内容。收据将 \x1b 等字面打印到纸上。但如果我使用 Visual Studio 将 \x1b 直接写入服务端的字符串,则不会。

标签: c# xml printing


【解决方案1】:

所以我找到了一个需要对模板进行少量更改的解决方案:

在模板方面,使用 PHP,我将 \x7 样式的 unicode 引用转换为 ,然后在我对它进行 base 64 编码之前:

$receipt_str = mb_convert_encoding($receipt_str, 'UTF-8', 'HTML-ENTITIES');

到目前为止,这是有效的。我只是不确定是否有更好的方法或对此是否有限制。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2013-08-21
    • 2012-10-26
    • 1970-01-01
    • 2020-03-15
    • 2013-01-29
    相关资源
    最近更新 更多