2

我使用 Zebra QL320 plus 打印机。字体是从 Win7 加载的(系统编码 CP1251)。当我通过蓝牙将文本从 Android 发送到俄罗斯 lng 打印机时:

! 0 200 200 200 1
ENCODING UTF-8
TEXT 14 0 20 80 Привет мир
PRINT

我的结果是这样的:

РџСЂРёРІРµС, РјРёСЂ

我该如何解决这个问题?

4

4 回答 4

3

我已经在 BluetoothSocket 的 OutputStream 中使用对 ISO-8859-1 的编码来解决它以打印西班牙字符。

      outputStream.write(cpclData.getBytes("ISO-8859-1")); 

也许您必须使用特殊的俄罗斯 ISO 字符集

于 2015-08-13T12:56:12.763 回答
1

俄语是什么编码?您是否将其作为 Java 中的字符串发送?您必须使用正确的编码形成您的字符串。尝试调试应用程序并从您发送的字符串中获取字节并确保字节正确

在这里查看 Sun 编码的东西

于 2012-03-16T16:40:55.263 回答
0

这是工作示例:

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。

于 2012-03-19T15:35:54.600 回答
0
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) {
        //
    }
}

在此处输入图像描述 为我正确的代码页 BServico.write(new byte[] { 0x1B, 0x74, 0x10 });

于 2017-10-15T02:48:23.480 回答