Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# 为什么是"€&引用;仅在打印机初始化之前而不是初始化之后打印的字符?_C#_Epson_Escpos_Pos For .net - Fatal编程技术网

C# 为什么是"€&引用;仅在打印机初始化之前而不是初始化之后打印的字符?

C# 为什么是"€&引用;仅在打印机初始化之前而不是初始化之后打印的字符?,c#,epson,escpos,pos-for-.net,C#,Epson,Escpos,Pos For .net,我有一台Epson TM-T88VI打印机,使用C#中的Microsoft.PointOfService.PosPrinter进行打印 使用以下函数,我得到一个奇怪的输出: public static void printerTestFunction2(string printerName) { PosExplorer explorer = new PosExplorer(); DeviceInfo di = explorer.GetDevice(

我有一台Epson TM-T88VI打印机,使用C#中的Microsoft.PointOfService.PosPrinter进行打印

使用以下函数,我得到一个奇怪的输出:

    public static void printerTestFunction2(string printerName)
    {
        PosExplorer explorer = new PosExplorer();
        DeviceInfo di = explorer.GetDevice("PosPrinter", printerName);
        PosPrinter printer = (PosPrinter)explorer.CreateInstance(di);

        printer.Open();
        printer.Claim(10000);
        printer.DeviceEnabled = true;
        printer.AsyncMode = false;

        string init = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, 64 });
        string totalCut = System.Text.ASCIIEncoding.ASCII.GetString(new byte[] { 27, 105 });
        string cmd = init + init + "A€A\nB€B\n" + init + "C€C\nD€D\n\n\n\n\n\n\n" + totalCut;
        printer.PrintNormal(PrinterStation.Receipt, cmd);
    }
输出为:

一欧元

B欧元B

氟氯化碳

DFD

因此,欧元符号被打印为奇怪的“F”符号(似乎F低于正常字符)。 这张纸剪对了

我还测试了不同的星座。似乎“€”符号仅在至少打印出一行后发送到打印机的第一个init命令之前打印。(我可以在开始时发送多个init命令-打印欧元。如果在打印一些字符后发送init,则会出现“F”而不是“€”)。 如果重新启动程序,“€”再次正确打印,但如果发送init命令,它将再次打印为“F”

“€”符号仅在第三个init命令之前打印的原因是什么?
我的代码是否有问题,或者是否缺少设置?

打印像F这样的字母的原因是因为打印机处于初始化状态,代码页437。
查看以下材料中的字母,十进制为213,十六进制为0xD5


POS for.NET服务对象根据CharacterSet属性的值在内部管理代码页设置

如果应用程序任意向打印机发送初始化命令,则服务对象的管理信息可能不一致,打印机可能打印不正确

如果您正在使用POS for.NET(包括OPOS/JavaPOS),则不应使用初始化命令(ESC@)或类似命令来更改模式或设置


从这个意义上说,与其直接发送剪纸,还不如调用剪纸方法,或者将UnifiedPOS中定义的POSPrinter剪纸转义序列(ESC | p)放入打印请求字符串中

谢谢你的快速回答,这很有意义。。。我不知道有任何初始化是自动完成的。我假设打印机恢复到手动向打印机发送任何命令之前的状态