ハードコードされた文字列をパラメータとして渡すと\x1B|200uF
、コマンドがそれを正しく受け入れるという問題があります。
しかし、XML要素から新しい文字列変数に同じ値を取得すると、次の値が得られます。\\x1B|200uF
ご覧のとおり、追加のエスケープシーケンスがあります。
要約すると、問題は次のとおりです。
using (XmlReader xmlReader = XmlReader.Create(@"PosPrinter.xml"))
{
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element)
{
switch (xmlReader.Name)
{
case "PosPrinter":
_printer.LogicalName = xmlReader.GetAttribute("LogicalName");
break;
case "FeedReceiptCommand":
_printer.FeedReceiptCommand = xmlReader.GetAttribute("value");
break;
'FeedReceiptCommand'文字列に値を取得します。上記の値はxmlに保存されますが、最初の追加のエスケープシーケンスと\x1B|200uF
同様に文字列に取得されます。\\x1B|200uF
次に、文字列変数FeedReceiptCommandを使用してコマンドを呼び出します。
_posPrinter.PrintNormal(PrinterStation.Receipt, PrinterSettings.FeedReceiptCommand );
ただし、余分なエスケープシーケンスがあるため、コマンドは実行されません。
しかし、ハードコードされた値で同じコマンドを呼び出すと、次のようになります。
_posPrinter.PrintNormal(PrinterStation.Receipt, "\x1B|200uF");
...その後、コマンドは正常に実行されます。
値\x1B|200uF
は、Microsoft.PointOfServiceを使用してEpson TM-T88Vプリンターに送信するESCコマンドです。一方、「\ x」は16進数用であり、1Bは16進数値です。
'Trim'、'Substring'を使用し、foreachループを実行して文字列内の各文字をループし、新しい文字を作成することで、余分なエスケープシーケンスを削除しようとしました。stringbuilderも試してみました。
しかし、私はここのどこかでポイントを逃しています。
したがって、の代わりに変数を渡す方法について助けていただければ幸いです。\x1B|200uF