Java - печать нелатинских символов в приложении Android - PullRequest
0 голосов
/ 03 мая 2018

У меня есть приложение для Android, и я пытаюсь использовать принтер Bluetooth для печати текста. Проблема в том, что я не могу правильно напечатать любой нелатинский символ. У меня есть этот код:

 public void printTaggedText() throws IOException {
     try {
         byte[] theText = "Întregul text în românește țș".getBytes("utf8 ");

         for (byte bit : theText) {
             System.out.println("Reached: " + Integer.toHexString(bit));
         }

         this.printText(theText);
    } catch (Exception e) {}
}

Я поставил для проверки правильности кодировки, поэтому я посмотрел на результирующие значения, и они, кажется, в порядке (я преобразовал их обратно в строку и получил тот же текст).

Это функция printText:

public void printText(byte[] b) throws IOException {
    synchronized(this) {
        this.write(b);
    }
}

А это напиши:

public synchronized void write(int b) throws IOException {
    this.write(new byte[]{(byte)b});
}

public synchronized void write(byte[] b) throws IOException {
    this.write(b, 0, b.length);
}

public synchronized void write(byte[] b, int offset, int length) throws IOException {
    this.mBaseOutputStream.write(b, offset, length);
}

Результат выглядит так:

enter image description here

Я знаю, что принтер поддерживает эти символы, потому что он печатает их правильно с помощью другого приложения.

1 Ответ

0 голосов
/ 03 мая 2018

Эти принтеры обычно работают в 8-битном символьном режиме и не понимают UTF-8 напрямую. Скорее, вы должны установить правильную кодовую страницу в принтере с помощью какой-либо команды ESC / POS, а затем преобразовать свой текст в эту кодовую страницу перед отправкой на принтер. В системе BSD / Linux вы можете, например, используйте iconv для этой цели.

...