2015-04-12 5 views
-1

я использую Datamax принтер, я посылаю к последовательному порту C# программного обеспечением для печати аравийских в меткахотправить аравийское письмо к последовательному порту

Код

serialPort1.PortName = "COM1"; 
    serialPort1.BaudRate = 9600; 
    serialPort1.Open(); 
    //serialPort1.Encoding = Encoding.GetEncoding("windows-1256"); 
    serialPort1.Encoding = Encoding.ASCII; 
    serialPort1.Write("\x02" + "L" + "\x0D"); 
    serialPort1.Write("D12" + "\x0D"); 

    serialPort1.Write("H20" + "\x0D"); 
    string test_arab = "الحملله"; 
    serialPort1.Write("190000202600010 " + test_arab + "\x0D");//text 
    //serialPort1.Write("B" + test_arab + "\x0D"); 
    serialPort1.Write("Q" + ' ' + test_arab + "\x0D"); 
    serialPort1.Write("E" + "\x0D"); 
    serialPort1.Close(); 

результата в таких лейблах, как это «?? ?????»

как я могу печатать арабский, как "الحمد لله"

+4

Вы не можете использовать Encoding.ASCII, но вы уже знали, что. Какой из них вам понадобится, зависит от набора символов принтера, который вы выбрали, 1256 не очень вероятен. Вам придется использовать RTFM или использовать телефон. –

ответ

-3

Вы используете кодировку ASCII

serialPort1.Encoding = Encoding.ASCII; 

и исходный код файлов C# в UTF-8.

Так попытаться преобразовать строку в ASCII затем записать в порт:

byte[] pass_byte = Encoding.ASCII.GetBytes("الحمد لله"); 
+1

Я пробовал это и не работал –

+0

byte [] pass_byte = Encoding.ASCII.GetBytes ("الحمد لله"); serialPort1.Write ("190000202600010" + "kadkakdakl" + ((char) pass_byte [2]). ToString() + "\ x0D"); –

+1

@Khaled См. Http://joelonsoftware.com/articles/Unicode.html – GSerg

Смежные вопросы