4

Bluetooth プリンター Zebra iMZ320 で印刷できるアプリケーションがありますが、UTF-8 固有の文字 (Æ、Ø、Å) に問題があります。

次のようにデバイスに接続しています。

        BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macAddr);
        Method m = device.getClass().getMethod("createRfcommSocket", new Class[] { Integer.TYPE });
        bSocket = (BluetoothSocket)m.invoke(device, new Object[] { Integer.valueOf(1) });
        bSocket.connect();
        outStream = bSocket.getOutputStream();
        inStream = bSocket.getInputStream();

ソケットが開いた後、CPCL でデータを送信しています。

        String cpclData = "! U1 SETLP 5 2 24 \r\n"+text+"\r\n";
        outStream.write(cpclData.getBytes());
        outStream.flush();

しかし、言及された文字を印刷しようとすると、代わりに異常な文字が書き込まれます。

Zebra に問い合わせたところ、Zebra のエンジニアの 1 人が次のことを試してみるべきだと書いてきました。

! 0 200 200 80 1 
IN-MILLIMETERS 
JOURNAL 
CENTER 
COUNTRY NORWAY
TEXT 4 0 0 8 COUNTRY IS NORWAY OR DENMARK
TEXT 4 0 0 15 Æ Ø Å
PRINT

しかし、それはまったく何もしません。

4

5 に答える 5

5

Android デバイスからラベルを印刷しようとすると簡単です。「ISO-8859-1」エンコーディングを使用してデータを書き込むときは、次を見てください。

String cpclData = "! U1 SETLP 5 2 24 \r\n"+text+"\r\n";
outStream.write(EncodingUtils.getBytes(cpclData, "ISO-8859-1"));
outStream.flush();
于 2014-04-24T20:52:08.713 に答える
1

CPCL 言語では Unicode はサポートされていません。ただし、ZPL で実行できます。iMZ は ZPL をサポートしています。このリンクをチェックしてください。

于 2013-08-14T15:33:10.980 に答える
0

同様の問題で、Bluetooth経由でZebra MZ220プリンターでスペイン語の特殊文字を印刷しようとして、最終的に次のことを行いました(この回答では、Å、Æ、Ø、å、æ、øの文字を追加します):

  1. 目的の文字列を目的のバイト配列に変換するコードを定義します。

    public class Util
    {
        public final static String  caracteresEspeciales        = "ÜüÁáÉéÍíÓóÚúÑñÅÆØåæø";
    
        public final static byte[]  codigoCaracteresEspeciales  = new byte[] {(byte) 0xDC, (byte) 0xFC, (byte) 0xC1, (byte) 0xE1, (byte) 0xC9, (byte) 0xE9,
                (byte) 0xCD, (byte) 0xED, (byte) 0xD3, (byte) 0xF3, (byte) 0xDA, (byte) 0xFA, (byte) 0xD1, (byte) 0xF1, (byte) 0xC5, (byte) 0xC6, (byte) 0xD8,
                (byte) 0xE5, (byte) 0xE6, (byte) 0xF8           };
    
        public static byte[] stringABytes(String s)
        {
            int i, l, i_especial;
            byte b;
            byte[] b_arr;
            String s_sub;
    
            if(s == null)
                return null;
            if((l= s.length()) < 1)
                return new byte[0];
    
            // convertimos a byte carácter por carácter
            b_arr= new byte[l];
            for(i= 0; i < l; i++)
            {
                s_sub= s.substring(i, i + 1);
                i_especial= Util.caracteresEspeciales.indexOf(s_sub);
                if(i_especial < 0)
                    b= (s_sub.getBytes())[0];
                else
                    b= Util.codigoCaracteresEspeciales[i_especial];
                b_arr[i]= b;
            }
    
            return b_arr;
        }
    }
    

これらの 16 進コードは、プリンターに付属している PROMAN-CPCL ドキュメントから取得できます (APPENDIX C-CHARACTER TABLES, Latin 1 Character Set table)。

  1. 文字列を変換して送信します。

            String datos_cplc;
            byte[] b_arr;
            ...
            datos_cplc= "! 0 200 200 48 1\r\n" + 
                    "TEXT 7 0 0 0 12345678901234567890123456789012\r\n" + 
                    "TEXT 7 0 0 25 ÜüÁáÉéÍíÓóÚúÑñÅÆØåæø AEIOUaeiou1\r\n" + 
                    "FORM\r\n" + 
                    "PRINT\r\n";
            b_arr= Util.stringABytes(datos_cplc);
            ...
            connection.write(b_arr);
    
  2. 結果:

ここに画像の説明を入力

于 2015-04-14T17:06:52.340 に答える