2017-06-19 63 views
0

C#で書かれたWindowsサービスを使用して、エスケープシーケンスを使用してプリンター内の機能を開始する領収書プリンタに送ります。例えば:ペーパーカッターを操作するエスケープ文字をXMLの文字列からANSIに変換する方法

\x1b\x64\x02

私は別のサーバー上の領収書テンプレートファイルを使用して、64ビットのエンコードされたテキストをXMLに入れてWindowsサービスに提供しています。問題は、テキストをXMLから抽出するときにレシート上に文字通り印刷され、エスケープ文字が翻訳されていないことと関係があるということです。

私は、これらのエスケープシーケンスをVisual Studioに入力すると、その文字列のANSI文字を表していると推測しています(そのようにしてからペーパーカッターがトリガーするため動作するためです)。

エスケープシーケンスを含む文字列をC#Windowsサービスで使用するための適切な形式に変換するにはどうすればよいですか?目標は、これらの単純なエスケープシーケンスをテンプレートファイルに入力し、もう一方の端で適切に変換することです。

C#コードiはベース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); 

サービスによって受信されたテストレシートの内容であります私は、例えば、64エンコード\x7をベース

XHgxYlx4MWRceDYxXHgxIE1OSG9tZU91dGxldC5jb20yMzAwIFdlc3QgSGlnaHdheSAxMw0KQnVybnN2aWxsZSwgTU4gNTUzMzcNCjk1Mi0yNzktMTU4Nw0KDQpceDFiXHgxZFx4NjFceDBceDFiXHg0NFx4Mlx4MTBceDIyXHgwIERhdGU6IDIwMTctMDYtMTVceDkgVGltZTogMzo0NmFtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KXHgxYlx4NDUgU0FMRSANClx4MWJceDQ2

  • サービス内から:サービス内から(ASCIIなど)Bw==
  • :(Unicodeとして)BwA=
  • PHPの文字列から:XHg3
+0

XMLの生成方法を示す[mcve]というコードが必要です。つまり、 '\ x1b'と' \ x02'は、[XML標準1.0(第4版)](https://www.w3.org/TR/2006)に従ってXMLファイルに含める無効なUnicode文字コードです/ REC-xml-20060816 /#charsets)([XmlWriter'](https://msdn.microsoft.com/en-us/library/system.xml.xmlwriter(v = vs.110).aspx)でサポートされています。したがって、 'XmlWriter'を使用している場合、これらの文字はおそらくエスケープされています。 – dbc

+0

'\ xNN'形式の代わりに' \ uNNNN'文字リテラル形式を使用することもできます。理由が説明されているので(https://stackoverflow.com/a/32175520/3744182)、エラーが起こりにくいです。 – dbc

+0

私は答えを更新しました。私は基数64が領収書の内容をコード化してXMLコンプライアンスを削減して以来、 –

答えて

0

だから私は、A必要と解決策を見つけましたテンプレートへの変更の少量:

テンプレート側では、PHPを使用して、私は64エンコードそれベース前I次いでから\x7スタイルユニコード参照を変換し:

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

これまでのところこれが動作しています。もっと良い方法があるのか​​、これに限界があるのか​​どうかは分かりません。

関連する問題