Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将转义字符从XML中的字符串转换为ANSI_C#_Xml_Printing - Fatal编程技术网

C# 如何将转义字符从XML中的字符串转换为ANSI

C# 如何将转义字符从XML中的字符串转换为ANSI,c#,xml,printing,C#,Xml,Printing,当我使用C#编写的Windows服务将原始字符串发送到收据打印机时,该打印机使用转义序列启动打印机内的功能。例如: \x1b\x64\x02 操作切纸机 我正在另一台服务器上使用一个收据模板文件,并将文本(base64编码)放入XML中,以将其提供给Windows服务。问题是,从XML中提取文本时,文本实际上是打印在收据上的,这与未翻译的转义字符有关 我猜,当我在VisualStudio中键入这些转义序列时,它表示字符串中的ANSI字符(因为当我这样做时,它工作,然后切纸机触发) 如何将包含转义

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

\x1b\x64\x02

操作切纸机

我正在另一台服务器上使用一个收据模板文件,并将文本(base64编码)放入XML中,以将其提供给Windows服务。问题是,从XML中提取文本时,文本实际上是打印在收据上的,这与未翻译的转义字符有关

我猜,当我在VisualStudio中键入这些转义序列时,它表示字符串中的ANSI字符(因为当我这样做时,它工作,然后切纸机触发)

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

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

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);
以下是服务收到的测试回执的内容:

xHGxYLx4MWrcedyXXHgXIE1OSG9TZU91DGXLDC5JB20YMZAWIFDLC3QGSGLNAHDESAXMW0KQNVYBN2AWXSZSWGTU4GNTUZMZCNCjk1Mi0YNzKTM4NW0KDQpCedFixHgXZFx4NJfccedBcedHg0NFx4MLX4mBcEdyxHgHg6IDIdHgTcTcTcTvGgLs0Tg0TgLs0Tg0Ls0Tg0Tg0Tg0Tg0Tg0Ls0Tg0Tg0Ls0Ls0Tg0Tg0Ls0Tg0Ls0Tg0Tg0Ls0Tg0Ls0Ls0Tg0Ls0T

例如,当我使用base64编码
\x7

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

因此我找到了一个只需对模板进行少量更改的解决方案:

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

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

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

我们需要看一些代码,理想情况下是显示XML是如何生成的。也就是说,
\x1b
\x02
是无效的Unicode字符代码,根据所支持的格式包含在XML文件中。因此,如果您使用的是
XmlWriter
,这些字符可能会被转义。您可能还希望使用
\unnn
字符文字格式,而不是
\xNN
格式。出于解释的原因,它不太容易出错。我更新了答案。自Base64之后,我对收据的内容进行了编码,以减少对XML的遵从性。上面的代码显示了如何解码
内容
字符串。首先,您是如何对其进行编码的?我使用
base64\u encode
在PHP中对字符串进行编码。该字符串是呈现的phtml文件的内容。收据将\x1b等逐字打印在纸上。但如果我使用Visual Studio将\x1b直接写入服务端的字符串中,则不会这样做。