我有一个Android应用程序,我试图使用蓝牙打印机打印一些文本。问题是我无法正确打印任何非拉丁字符。 我有这段代码:
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) {}
}
我已经把for检查编码是否正确,因此我查看了结果值,它们似乎没问题(我将它们转换回String并且我得到了相同的文本)。
这是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);
}
结果如下:
我知道打印机支持这些字符,因为它可以使用其他应用程序正确打印它们。
答案 0 :(得分:1)
这些打印机通常以8位字符模式工作,不直接理解UTF-8。相反,您必须使用某些ESC / POS命令在打印机中设置正确的代码页,然后在将文本发送到打印机之前将其转换为该代码页。在BSD / Linux系统上你可以例如为此目的使用iconv。