0

我尝试将默认代码页更改为 PC858(多语言 + 欧元)以打印符号 €。

但是任何 ESC/POS 命令都有效。

所以我尝试发送命令的十六进制值:

    public void EnvoiCommande(byte donnee)
    {
        byte[] array = {donnee};
        _outStream.Write(array, 0, 1);
        _outStream.Flush();
    }



    public void ImpressionTicket(List<string> donnee, string appareil, Texture2D logo)
    {
      // Code Page
      EnvoiCommande(0x1b);
      EnvoiCommande(0x74);
      EnvoiCommande(0x13);

      foreach (var txt in donnee)
      {
         var ligne = txt;
         Encoding encoding = Console.OutputEncoding;
         byte[] originalBytes = encoding.GetBytes(ligne);
         byte[] outputBytes = Encoding.Convert(encoding,
         Encoding.GetEncoding("CP00858"), originalBytes);
         _outStream.Write(outputBytes, 0, outputBytes.Length);
         Thread.Sleep(10);
      }
    }

我的所有文本都打印正确,但我的符号 € 不起作用。

在此先感谢您的帮助,我尝试了许多 PDF,并测试了许多类似的问题,但没有任何效果。

4

3 回答 3

0

一次性发送“字符表命令”:

public void EnvoiCommande(params byte[] donnees)
{
   _outStream.Write(donnees, 0, 1);
   _outStream.Flush();
}

// Code Page
EnvoiCommande(0x1b, 0x74; 0x13);
于 2018-03-26T11:12:46.883 回答
0

Encoding.GetEncoding 返回一个您必须使用的值。

于 2017-05-28T08:49:02.960 回答
0

您是否尝试只发送字节码以查看您是否有正确的代码页?

https://en.wikipedia.org/wiki/Code_page_858

如果您尝试打印 0xD5 并获得 € 符号,那么是的,您拥有正确的代码页。

然后我们知道问题出在将 String 转换为 byteArray 时,检查一下:

http://www.fileformat.info/info/unicode/char/20ac/index.htm

unicode 中的 € 是:0x20AC,即 0xE2 0x82 0xAC。因此,€ 符号转换为 3 个字节,对您的打印机具有其他含义。打印机可能会打印这个“Ôé¼”?

如果您只对 € 符号有疑问,您可以在将字符串转换为 byte[] 之前简单地检查字符串。

if (ligne.contains("€"){
    ligne.replace("€",(char)0xD5);
}
于 2017-07-25T09:25:26.483 回答