在爱普生TM-T88IVM打印机上打印简体中文字符

7
我正在尝试使用Microsoft Point of Service SDK在C#中打印中文字符,以便在Epson TM-T88IV M(并口)上输出。然而,它们在打印机上显示为问号。(?)
我的PosPrinter有以下有效的CharacterSetList: 255,437,850,852,858,860,863,865,866,936,998,999,1252
并拥有以下CapCharacterSet: Kanji
代码页1252是默认的windows代码页,936是简体中文的代码页。在这种情况下,我正在使用代码页936,但从未能够在打印机上显示中文字符。
示例:
string str = "重新开始";
// open device as variable _ReceiptPrinter, claim it, mark it as enabled 
_ReceiptPrinter.CharacterSet = 936;
_ReceiptPrinter.PrintNormal(PrinterStation.Receipt, str);

这将打印出所有中文字符替换为?的文本。

我不确定是否需要在打印之前指定其他转义代码(ESC R 15?),或者我的打印机在Epson OPOS(v2.50e)中配置错误。我尝试了许多方法,但都没有成功。有什么想法或代码示例吗?

注意:在自检中,打印机可以打印中文字符。


你的例子中 charset 是什么意思?另外,汉字并不等同于简体中文。 - Jeremy McGee
字符集 == 936(简体中文代码页);Kanji是CapCharSet枚举值。我希望使用Unicode,但假设Epson将其定义为Kanji,因为没有更好的选择(而且我认为这台打印机仅支持简体中文的特定子集,而不是所有Unicode)。public enum CharacterSetCapability { Numeric = 0, Alpha = 1, Kana = 10, Kanji = 11, Unicode = 997, Ascii = 998, Windows = 999, Ansi = 999, } - Jason Kealey
嗨,Jason,你是如何检查打印机中的有效字符集列表的?下面的答案在我测试简体中文(936)时有效,但在繁体中文(950)上无效。 - Sam
1个回答

4
爱普生TM-T88IV多语言打印机需要将字符串转换为CodePage 936,然后以ISO-8859-1表示该字符串。
有关算法的详细信息,请参见其他问题: 我们可以简化此字符串编码代码 在发送到打印机之前执行此操作。 str = Encoding.GetEncoding("ISO-8859-1").GetString(Encoding.GetEncoding(_ReceiptPrinter.CharacterSet).GetBytes(str));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接