C# POS58打印机 中文乱码问题
求大神指导,我写了一个打印的程序,winform 的,实际运用中有三台打印机,有两台是普通小票打印机可以正常打印(中文显示正常),但是另一台是POS58 小票打印机,出来的中文全是乱码。我试了各种编码 ANSI,UTF-8,UNICODE 都不行,还是中文乱码。 这台POS58打印机打印测试页面 是正常的。求大神指教,是哪里出现了问题。现在贴上代码。
//打印
var p2 = new PrintInvoice();
p2.Open(btstr);//吧台
bool pb1 = p2.StartPrint();
foreach (string id in idlist)
{
Printeg2(dt,id, p2);
}
p2.Close();
#region 吧台打印
private void Printeg2(DataTable dt, string id, PrintInvoice p)
{
DataRow[] rows = dt.Select("id=" + id);
if (rows == null)
{
return;
}
if (rows.Length < 1)
{
return;
}
string order_no = rows[0]["order_no"].ToString();
string mobile = rows[0]["mobile"].ToString();
string eat_time = rows[0]["eat_time"].ToString();
p.SetAlignMode(eTextAlignMode.Middle);
p.SetFontSize(2);
p.PrintText("济琼美食\n");
p.SetBold(true);
p.SetFontSize(2);
p.PrintText("结账单\n");
p.PrintText(" \n");
p.SetAlignMode(eTextAlignMode.Left);
p.SetFontSize(1);
p.PrintText("单号:" + order_no + "\n");
p.PrintText("开台时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " \n");
p.SetBold(false);
p.PrintText("收款员:" + lib.pubhelper.accountname + " 客人数:1" + "\n");
p.PrintText("———————————————————————\n");
p.PrintText("菜品名 单价 数量 金额\n");
p.PrintText("———————————————————————\n");
decimal allprice=0;
foreach (DataRow row in rows)
{
decimal price=decimal.Parse(row["real_price"].ToString())*int.Parse(row["goods_nums"].ToString());
allprice += price;
p.PrintText(row["goods_name"].ToString() + " " + row["real_price"].ToString() + " " + row["goods_nums"].ToString() + " " + price.ToString("0.00") + "\n");
}
p.PrintText("———————————————————————\n");
p.PrintText("合计 " + allprice.ToString("0.00") + "\n");
p.PrintText("单号:" + order_no + "\n");
p.PrintText("用餐时间:" + eat_time + "\n");
p.PrintText("联系电话:" + mobile + "\n");
p.PrintText("———————————————————————\n");
p.SetBold(true);
p.SetFontSize(1);
p.PrintText("实收金额: " + allprice.ToString("0.00") + "\n");
p.PrintText("———————————————————————\n");
p.PrintText("微信支付:" + allprice.ToString("0.00") + "\n");
p.PrintText("———————————————————————\n");
p.PrintText("———————————————————————\n");
p.SetAlignMode(eTextAlignMode.Middle);
p.PrintText("感谢您的光临!\n");
p.PrintText(" \n");
p.PrintText(" \n");
p.PrintText(" \n");
p.PrintText(" \n");
p.PrintText(" \n");
p.Cut();
}
#endregion
打印类里面的方法如下:一部分代码
/// <summary>
/// 打印文本.在调用本函数之前必须先调用正确的 设置字体、左边距
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public Boolean PrintText(String content)
{
if (!m_Inited)
{
return false;
}
byte[] bytes = null;
if (content.Length < 1)
{
content = " ";
}
if (content[content.Length - 1] != (char)0x0D &&
content[content.Length - 1] != (char)0x0A)
{
content = content + (char)0x0A;
}
bytes = DataFormatProcessor.StringToBytes(content);
bool bl = SendCommand(content);
return bl;
}
DataFormatProcessor 里面的字符串转到字节数组方法:
public static Byte[] StringToBytes(String asciistr)
{
Byte[] bytes;
bytes = System.Text.Encoding.Default.GetBytes(asciistr);
return bytes;
}
红色部分 我有换成UTF8不行,UNICODE