2011-04-29 168 views
2

我正在为ESC POS打印创建一个类。C#ESC POS特殊字符

它需要支持特殊字符挪威语:ÆØÅæøå

的问题是,我不能只用他们的字符串。

“要打印的数据:打印数据”将打印为“要打印的数据:??????”

根据文档这些字符打印特殊字符我需要:

(炭)91个打印 “AE”

(炭)92个打印 “O”

(炭)93个打印“A”

(炭)123个打印 “AE”

(炭)124个打印 “O”

(char)125 prints“å”

所以我的问题是:有没有更好的办法比为每个字符做一个替换?

这里是连接到打印机并发送代码数据:

 Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     clientSock.NoDelay = true; 
     IPAddress ip = IPAddress.Parse("192.168.0.11"); 
     IPEndPoint remoteEP = new IPEndPoint(ip, 9100); 
     clientSock.Connect(remoteEP); 
     byte[] byData = Encoding.ASCII.GetBytes(buffer); 
     clientSock.Send(byData); 
     clientSock.Close(); 

解决:

Encoding nordic = Encoding.GetEncoding("IBM865"); 
byte[] byData = nordic.GetBytes(buffer); 

回答

3

如果它是一个标准的代码页(如code page 865 for Nordic languages),你可以使用适当的编码:

Encoding nordic = Encoding.GetEncoding("IBM865"); 

检查supported encodingsEncoding类,看是否有匹配。但从character layout of 865看来,您需要自己替换字符。

您可以使用字典创建字符映射,但很显然,一个大型的开关/ case语句对于开始可以做得很好(如果有一天有需要,您可以重构它)。

+0

根据ESC POS文件这应该工作,但它说“865”不是一个有效的编码。 – OMGKurtNilsen 2011-04-29 11:49:31

+0

它现在的作品使用:Encoding nordic = Encoding.GetEncoding(“IBM865”); TYVM – OMGKurtNilsen 2011-04-29 11:53:06

+0

@OMGKurtNilsen:很高兴听到这个消息。对不起,我错过了[table](http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx#remarksToggle)中的Name列,我将更新该帖子。 – Groo 2011-04-29 11:58:19

0

我不认为ASCII编码要做的是你想要的 - 看看会发生什么当你使用UTF-8时。

+1

ESC POS打印机使用ASCII命令。 UTF8不会搞乱命令,但不能解决特殊字符问题。 – OMGKurtNilsen 2011-04-29 10:36:15

+0

UTF-8将为这些字符发送两个八位字节......我怀疑它会起作用。我建议Latin-1(我似乎记得.NET的ASCII确实坚持7位)。 – Richard 2011-04-29 10:36:18

+0

似乎没有改变任何编码正在工作。我认为ESC POS正在使用自定义ASCII表格。猜猜我只需要做一个替换。 – OMGKurtNilsen 2011-04-29 10:46:30