【问题标题】:Print data on Zebra printer from Android via bluetooth通过蓝牙在 Android 的 Zebra 打印机上打印数据
【发布时间】:2012-03-16 05:47:19
【问题描述】:

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

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

我的结果是这样的:

Привет мир

我该如何解决这个问题?

【问题讨论】:

  • P.S.当我通过 USB 从 Label_Vista 发送此命令时,俄语文本打印正常。
  • 阅读打印机手册
  • 在打印机手册和 CPCL zebra 手册中搜索...我找不到。如果您告诉我在哪里或如何做到这一点,我将不胜感激。谢谢!
  • 好的,让我试试,请告诉我您的打印机的型号和名称

标签: android encoding zebra-printers


【解决方案1】:

我已经在 BluetoothSocket 的 OutputStream 中使用了一个符合 ISO-8859-1 的编码来打印西班牙字符。

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

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

【讨论】:

    【解决方案2】:

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

    Check out the Sun encoding stuff here

    【讨论】:

    • 不幸的是,这不是编码。我下载 Zebra Android 应用程序 (zebra.com/android/ZebraUtilities.apk) 并尝试打印俄语文本。结果一样。
    • Zebra Android 应用程序不一定以正确的编码包装字符串。你如何在 Android 中发送上面的字符串?使用适用于 Android 的 Zebra SDK?还是字节?如果您对上面的字符串执行 getBytes(),您是否将正确的编码传递给 getBytes("utf-8")?它可能会在进入打印机之前破坏编码。
    • 我尝试使用 getBytes("UTF-8"),但它没有帮助。下一步是使用 CharsetDecoder 和 CharsetEncoder 更改编码及其帮助。俄语文本打印正确。
    【解决方案3】:

    这是工作示例:

    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 的字体。

    【讨论】:

    • 您好,我也面临同样的问题。我正在使用 android sdk ZebraPrinterConnection 和 ZebraPrinter 对象。我看不到任何打开 OutputStream 的方法。您的示例中的套接字是什么类型的对象??
    • 我不使用 ZebraPrinterConnection。只有 android BluetoothSocket - developer.android.com/guide/topics/wireless/bluetooth.html.
    • 谢谢伙计,我与蓝牙 API 建立了连接,现在它可以工作了。我还从 Zebra 反编译了 sdk,他们只是忽略了与编码相关的所有内容:-(
    • @smie 您曾尝试打印我尝试过的 arbic 文本,但如果您可以的话,它将无法打印,请帮助
    【解决方案4】:
    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 });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 2014-07-22
      • 1970-01-01
      • 2014-04-26
      • 2011-07-05
      • 2020-04-10
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多