我使用 Zebra QL320 plus 打印机。字体是从 Win7 加载的(系统编码 CP1251)。当我通过蓝牙将文本从 Android 发送到俄罗斯 lng 打印机时:
! 0 200 200 200 1
ENCODING UTF-8
TEXT 14 0 20 80 Привет мир
PRINT
我的结果是这样的:
РџСЂРёРІРµС, РјРёСЂ
我该如何解决这个问题?
我使用 Zebra QL320 plus 打印机。字体是从 Win7 加载的(系统编码 CP1251)。当我通过蓝牙将文本从 Android 发送到俄罗斯 lng 打印机时:
! 0 200 200 200 1
ENCODING UTF-8
TEXT 14 0 20 80 Привет мир
PRINT
我的结果是这样的:
РџСЂРёРІРµС, РјРёСЂ
我该如何解决这个问题?
我已经在 BluetoothSocket 的 OutputStream 中使用对 ISO-8859-1 的编码来解决它以打印西班牙字符。
outputStream.write(cpclData.getBytes("ISO-8859-1"));
也许您必须使用特殊的俄罗斯 ISO 字符集
俄语是什么编码?您是否将其作为 Java 中的字符串发送?您必须使用正确的编码形成您的字符串。尝试调试应用程序并从您发送的字符串中获取字节并确保字节正确
这是工作示例:
public void bluetoothSendData(String text){
bluetooth_adapter.cancelDiscovery();
if (socket_connected) {
try {
OutputStream o_stream = socket.getOutputStream();
o_stream.write(decodeText(text, "CP1251"));
Log.i("emi", "Data was sended.");
} catch (IOException e) {
bluetoothCloseConnection();
Log.i("emi", "Send data error: " + e);
}
} else {
Log.i("emi", "Bluetooth device not connected.");
}
}
private byte[] decodeText(String text, String encoding) throws CharacterCodingException, UnsupportedEncodingException{
Charset charset = Charset.forName(encoding);
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(text));
CharBuffer cbuf = decoder.decode(bbuf);
String s = cbuf.toString();
return s.getBytes(encoding);
}
我如何理解,这个例子将适用于从操作系统加载的字体,编码为 CP1251。
BServico.write(new byte[] { 28, 46 }); //Cancels Chinese character mode
//TEST
for (int i = 0; i < 20; i++) {
String text = String.format("%d - %s - çüáéíóúñåæø\n", i, Integer.toHexString(i));
BServico.write(new byte[] { 0x1B, 0x74, (byte)i });
try {
BServico.write(text.getBytes("ISO-8859-1"));
} catch (Exception ex) {
//
}
}