【问题标题】:Xprinter q260nl OPOS doesn't print any Russian charactersXprinter q260nl OPOS 不打印任何俄语字符
【发布时间】:2023-03-30 00:36:01
【问题描述】:

我在通过 XPrinter q260nl 打印俄语符号时遇到问题,它会打印问号。

我正在使用 OPOS 驱动程序,并且我在 C# UWP 中的代码与适用于 .NET 的框架 POS 的 Windows 10 版本是 1809。我尝试通过 Microsoft POS Tester 应用程序进行打印,该应用程序附带适用于 .NET 的 POS。

打印机通过 USB 连接。打印机打印正常,但只能打印英文字母。

ReceiptPrintJob job = claimedPrinter.Receipt.CreateJob();  
job.PrintLine(“Я русский”);

await job.ExecuteAsync();

【问题讨论】:

  • 我可以看到 here 您的打印机只处理 PC866 编码 (DOS),但 Я русский - 是 unicode 序列。如果您可以打印byte[] - 您可以使用如下内容:Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding("CP866"), Encoding.Unicode.GetBytes("Россия - священная наша держава"))
  • @vasily.sib 但是 UWP 只接受 ANSI ASCII UTF16LE
  • 是的,这就是为什么您需要将其从 "ANSI ASCII UTF16LE"(即Encoding.Unicode)转换为 "PC866"(即是Encoding.GetEncoding("CP866"))
  • @vasily.sib 因为我只能打印字符串我的代码是:job.PrintLine(Encoding.GetEncoding("CP866").GetString(Encoding.GetEncoding("CP866").GetBytes("я русский")));它给了我一个错误 System.ArgumentException: "Argument_EncodingNotSupported, cp866。有关更多信息,请访问go.microsoft.com/fwlink/?LinkId=623485"
  • 你能测试一下吗:var bytes = Encoding.GetEncoding("CP866").GetBytes("Я русский"); var str = new string(bytes.Select(b => (char)b).ToArray()); job.PrintLine(str); ?

标签: c# printers opos


【解决方案1】:

请检查PosPrinter.SupportedCharacterSets属性值中是否包含866。

如果不包括 866,您将无法打印俄语字符。
如果该值包含 866,请尝试在 CreateJob() 之前将 ClaimedPosPrinter.CharacterSet 属性设置为 866。

如果您无法在上面打印,请更改所有操作系统区域和俄罗斯的语言设置。
尤其是“非Unicode程序语言”的设置很重要。

【讨论】:

  • 我在 PosPrinter.SupportedCharacterSets 中没有 866 代码,有没有办法包含该代码或其他解决方案?
  • @Akbar Shamsutdinov,这种情况下,请放弃OPOS/POS等API for .NET/Windows.Devices.PointOfService,直接使用串口发送ESC/POS控制序列数据。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多