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