用蓝牙热敏打印机写入命令ESC / POS

时间:2017-05-24 00:57:36

标签: c# android bluetooth escpos

我尝试将默认代码页更改为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,并测试了许多类似的问题,但任何事情都无法解决。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

在一次冲洗中发送“角色表命令”:

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

// Code Page
EnvoiCommande(0x1b, 0x74; 0x13);