2011-04-29 172 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