Member 8235434 Ответов: 1

Отображение различных символов валюты в сетевом принтере toshibha с помощью C#


Я пытаюсь печатать команды CPCL на принтере toshiba с помощью программирования сокетов c# tcpclient.

это мой код

System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
      client.Connect(ipAddress, port)
      StreamWriter writer = new StreamWriter(client.GetStream())
      string printtemplate="! 0 200 200 300 1

                            PAGE-WIDTH 396

                            T 4 1 10 80 £75

                            T 4 1 140 80 £75

                            T 4 1 280 80 £75

                            FORM

                            PRINT" ;
                            byte[] unicodeBytes =   Encoding.Unicode.GetBytes(printtemplate);
                            byte[] win1252bytes =  Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(1252), unicodeBytes);
                            writer = new System.IO.StreamWriter(client.GetStream());
                           string win1252String =  Encoding.GetEncoding(1252).GetString(win1252bytes);
                           writer.Write(win1252String);
                         writer.Flush();
                       writer.Close();
                     client.Close();


Что я уже пробовал:

когда я пытаюсь выполнить его, он печатает u75 u75 u75 на принтере toshiba. выход должен быть £75 £75 £75 также он должен поддерживать другие символы валюты страны, такие как евро,доллар и все остальное.

пожалуйста, хил меня

1 Ответов

Рейтинг:
1

Jochen Arndt

Используйте BinaryWriter класс вместо класса StreamWriter класс и написать win1252bytes массив байтов:

byte[] unicodeBytes = Encoding.Unicode.GetBytes(printtemplate);
// EDIT: From comments, the printer support ISO-8859-15 to show the EURO symbol
//byte[] win1252bytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(1252), unicodeBytes);
byte[] isoBytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(28605), unicodeBytes);
writer = new System.IO.BinaryWriter(client.GetStream());
// The Write(Byte[]) method will write data as they are
//writer.Write(win1252bytes);
writer.Write(isoBytes);

Если вывод все еще неправильный, убедитесь, что принтер использует кодировку 1252.


Member 8235434

Спасибо за ваш ответ.

но евро не печатает. он печатает ?75 ?75 ?75. ожидаемый выход составляет €75 €75 €75

Jochen Arndt

Евро? В своем вопросе вы используете GBP.

Если фунт стерлингов работает, а евро нет, проверьте руководство вашего принтера. Действительно ли он использует Windows-1252 или ISO 8859-1? ISO 8859-1 не содержит всех символов (включая евро) из Windows-1252. Если вам нужен символ евро, ваш принтер должен поддерживать стандарт ISO-8859-15.

Видишь https://de.wikipedia.org/wiki/ISO_8859-1.
Он показывает кодовые точки вышеприведенных кодировок и объясняет различия.

EDIT: черт возьми, я разместил немецкую ссылку, а английская не объясняет различий.

Member 8235434

принтер поддерживает ISO-8859-15.. но евро не печатает. есть ли какая-то другая кодировка для получения евро??

Jochen Arndt

Затем вы должны отправить ему кодированные данные ISO-8859-15. Просто замените 1252 на 28605 (см. https://msdn.microsoft.com/en-us/library/system.text.encoding (v=vs.110). aspx для номеров кодовых страниц).

Member 8235434

не повезло. тот же вопрос.

Jochen Arndt

Вы выбрали ISO 8859-15 на принтере?
Вы должны отправить данные в кодировке, фактически выбранной (настроенной) на принтере.

Member 8235434

Я использую сетевой принтер toshiba (принтер этикеток). Нет опции для выбора в принтере..

Jochen Arndt

Я не знаю вашей модели принтера и не имею руководства.

Просто проверьте это сами:
Какая кодировка поддерживается?
Если поддерживается несколько кодировок, как их можно выбрать?

Возможные методы выбора: клавиши на принтере , конфигурационное программное обеспечение, настройки драйвера или даже отправка определенных команд. Проверьте инструкцию.

Выберите наиболее подходящую кодировку (предпочтительно Unicode, например UTF-8).

Затем отправьте данные в соответствующей кодировке.

Member 8235434

я использую портативный принтер toshiba b-ep2dl-gh40-qm-r

Jochen Arndt

Вы ожидаете, что я сейчас получу инструкцию и проверю ее для вас?

Как программист вы должны уметь это делать.

Итак, быстрый поиск показывает, что в драйвере принтера есть несколько вариантов. Вы можете выбрать шрифт штрих-кода и указать кодировку, которая по умолчанию выглядит как Windows-1252.

Тогда должна быть возможность отображения символа евро. Но у меня нет принтера, и я не могу его проверить.

Member 8235434

Спасибо за ваш ответ :)