草庐IT

java - Android热敏打印机阿拉伯语问题

coder 2023-09-02 原文

public class Globals {
    // TODO IMPORTANT CONFIG CHANGES
    // ** IMPORTANT CONFIGURATION
    private static String serverRealUrl = "http://www.myserver.com/api";    //Real Server configuration
    private static String serverLocalUrl = "http://localhost:80/api";             //local configuration
    /**
     * Substitute you own sender ID here. This is the project number you got
     * from the API Console, as described in "Getting Started."
     */

    public static String SENDER_ID = "000000";
    public static String base64EncodedPublicKey = "xxxxx";
    //DEBUG MODO
    public static boolean debugModeBoolean = true;  //USE in DEBUG MODE
    //public static boolean debugModeBoolean = false;  //USE in REAL  MODE


    //PRINT FROM WEB ENABLES
    //public static boolean printFronWebEnabled = true;  //USE to activate print fron web
    public static boolean printFronWebEnabled = false;  //USE  to deactivate print fron web

    //GCM Register
    //public static boolean gcmRegisterEnabled = true;  //USE to register device in GCM
    public static boolean gcmRegisterEnabled = false;  // not use gcm services


    //IN APP BILLING
    //public static boolean inAppBillingModeON = true;  //USE in pay app modo on
    public static boolean inAppBillingModeON = false;  //USE in pay app modo off


    private static String internalClassName = "Globals";    // * Tag used on log messages.
    public static int deviceType = 0;                       // * Device type
    //0 Pending config (Default as start)
    //1 NET Print
    //2 RS232   ->Pending
    //3 USB
    //4 BT

    //Google subscriptions
    public static boolean mSubscribedToYearlyUsed = false;


    // Bluetooth  variable Config
    public static BluetoothAdapter mBluetoothAdapter;
    public static BluetoothSocket mmSocket;
    public static BluetoothDevice mmDevice;


    public static String logoProcesed = "";

    public static OutputStream mmOutputStream;
    public static InputStream mmInputStream;


    // NET Printer Config
    public static String deviceIP = "";
    public static int devicePort = 0;
    public static int usbDeviceID = 0;
    public static int usbVendorID = 0;
    public static int usbProductID = 0;
    public static String blueToothDeviceAdress = "";
    public static int blueToothSpinnerSelected = -1;

    public static String tmpDeviceIP = "";
    public static int tmpDevicePort = 0;
    public static int tmpUsbDeviceID = 0;
    public static int tmpUsbVendorID = 0;
    public static int tmpUsbProductID = 0;
    public static String link_code = "";
    public static String tmpBlueToothDeviceAdress = "";


    public static String getServerUrl() {
        String actualServer = "";
        if (debugModeBoolean) {
            actualServer = serverLocalUrl;
        } else {
            actualServer = serverRealUrl;
        }

        return actualServer;
    }

    public static String server_registerPrinter = "registerPrinter";
    public static String server_getData = "getData";
    public static String regid = "";
    public static String picturePath = "";


    public static void savePreferences(SharedPreferences sharedPrefs) {
        Log.i(internalClassName, "savePreferences");


        SharedPreferences.Editor editor = sharedPrefs.edit();
        editor.putString("usbDeviceID", String.valueOf(usbDeviceID));
        editor.putString("usbVendorID", String.valueOf(usbVendorID));
        editor.putString("usbProductID", String.valueOf(usbProductID));


        editor.putString("blueToothDeviceAdress", String.valueOf(blueToothDeviceAdress));


        editor.putString("deviceType", String.valueOf(deviceType));
        //Ethernet
        editor.putString("deviceIP", String.valueOf(deviceIP));
        editor.putString("devicePort", String.valueOf(devicePort));

        editor.putString("link_code", String.valueOf(link_code));
        editor.putString("picturePath", String.valueOf(picturePath));
        editor.putString("logoProcesed", logoProcesed);

        Log.i(internalClassName, "               deviceType=" + String.valueOf(deviceType));
        Log.i(internalClassName, "               deviceIP=" + String.valueOf(deviceIP));
        Log.i(internalClassName, "               devicePort=" + String.valueOf(devicePort));
        Log.i(internalClassName, "               usbDeviceID=" + String.valueOf(usbDeviceID));
        Log.i(internalClassName, "               blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));


        editor.commit();

    }

    public static void savePreferenceskitchen(SharedPreferences sharedPrefs) {
        Log.i(internalClassName, "savePreferences");


        SharedPreferences.Editor editor = sharedPrefs.edit();
        editor.putString("usbDeviceID", String.valueOf(usbDeviceID));
        editor.putString("usbVendorID", String.valueOf(usbVendorID));
        editor.putString("usbProductID", String.valueOf(usbProductID));


        editor.putString("blueToothDeviceAdress", String.valueOf(blueToothDeviceAdress));


        editor.putString("deviceType", String.valueOf(deviceType));
        //Ethernet
        editor.putString("deviceIP", String.valueOf(deviceIP));
        editor.putString("devicePort", String.valueOf(devicePort));

        editor.putString("link_code", String.valueOf(link_code));
        editor.putString("picturePath", String.valueOf(picturePath));
        editor.putString("logoProcesed", logoProcesed);

        Log.i(internalClassName, "               deviceType=" + String.valueOf(deviceType));
        Log.i(internalClassName, "               deviceIP=" + String.valueOf(deviceIP));
        Log.i(internalClassName, "               devicePort=" + String.valueOf(devicePort));
        Log.i(internalClassName, "               usbDeviceID=" + String.valueOf(usbDeviceID));
        Log.i(internalClassName, "               blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));


        editor.commit();

    }



    public static void loadPreferences(SharedPreferences sharedPrefs) {
        Log.i(internalClassName, "loadPreferences");


        usbDeviceID = mathIntegerFromString(sharedPrefs.getString("usbDeviceID", "0"), 0);
        usbVendorID = mathIntegerFromString(sharedPrefs.getString("usbVendorID", "0"), 0);
        usbProductID = mathIntegerFromString(sharedPrefs.getString("usbProductID", "0"), 0);


        link_code = sharedPrefs.getString("link_code", "");
        picturePath = sharedPrefs.getString("picturePath", "");
        blueToothDeviceAdress = sharedPrefs.getString("blueToothDeviceAdress", "x:x:x:x");

        deviceType = mathIntegerFromString(sharedPrefs.getString("deviceType", "0"), 0);
        //Ethernet
        deviceIP = sharedPrefs.getString("deviceIP", "192.168.0.98");
        devicePort = mathIntegerFromString(sharedPrefs.getString("devicePort", "9100"), 9100);
        logoProcesed = sharedPrefs.getString("logoProcesed", "");


        Log.i(internalClassName, "               deviceType=" + String.valueOf(deviceType));
        Log.i(internalClassName, "               deviceIP=" + String.valueOf(deviceIP));
        Log.i(internalClassName, "               devicePort=" + String.valueOf(devicePort));
        Log.i(internalClassName, "               usbDeviceID=" + String.valueOf(usbDeviceID));
        Log.i(internalClassName, "               blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));


    }


    public static void loadPreferenceskitchen(SharedPreferences sharedPrefs) {
        Log.i(internalClassName, "loadPreferences");


        usbDeviceID = mathIntegerFromString(sharedPrefs.getString("usbDeviceID", "0"), 0);
        usbVendorID = mathIntegerFromString(sharedPrefs.getString("usbVendorID", "0"), 0);
        usbProductID = mathIntegerFromString(sharedPrefs.getString("usbProductID", "0"), 0);


        link_code = sharedPrefs.getString("link_code", "");
        picturePath = sharedPrefs.getString("picturePath", "");
        blueToothDeviceAdress = sharedPrefs.getString("blueToothDeviceAdress", "x:x:x:x");

        deviceType = mathIntegerFromString(sharedPrefs.getString("deviceType", "0"), 0);
        //Ethernet
        deviceIP = sharedPrefs.getString("deviceIP", "192.168.0.98");
        devicePort = mathIntegerFromString(sharedPrefs.getString("devicePort", "9100"), 9100);
        logoProcesed = sharedPrefs.getString("logoProcesed", "");


        Log.i(internalClassName, "               deviceType=" + String.valueOf(deviceType));
        Log.i(internalClassName, "               deviceIP=" + String.valueOf(deviceIP));
        Log.i(internalClassName, "               devicePort=" + String.valueOf(devicePort));
        Log.i(internalClassName, "               usbDeviceID=" + String.valueOf(usbDeviceID));
        Log.i(internalClassName, "               blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));


    }

    public static Integer mathIntegerFromString(String inti, Integer defi) {
        //used for preferences
        Integer returi = defi;
        if (!inti.equals("")) {
            try {
                returi = Integer.valueOf(inti);
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
        }

        return returi;

    }




    public static String prepareDataToPrint(String data) {
        //ESC POS Comamnds convertions


        data = data.replace("$bold$", "·27·E·1·");
        data = data.replace("$unbold$", "·27·E·0·");


        data = data.replace("$intro$", "·13··10·");
        data = data.replace("$cut$", "·27·m");
        data = data.replace("$cutt$", "·27·i");

        data = data.replace("$al_left$", "·27·a·0·");
        data = data.replace("$al_center$", "·27·a·1·");
        data = data.replace("$al_right$", "·27·a·2·");

        data = data.replace("$small$", "·27·!·1·");
        data = data.replace("$smallh$", "·27·!·17·");
        data = data.replace("$smallw$", "·27·!·33·");
        data = data.replace("$smallhw$", "·27·!·49·");

        data = data.replace("$smallu$", "·27·!·129·");
        data = data.replace("$smalluh$", "·27·!·145·");
        data = data.replace("$smalluw$", "·27·!·161·");
        data = data.replace("$smalluhw$", "·27·!·177·");


        data = data.replace("$big$", "·27·!·0·");
        data = data.replace("$bigh$", "·27·!·16·");
        data = data.replace("$bigw$", "·27·!·32·");
        data = data.replace("$bighw$", "·27·!·48·");

        data = data.replace("$bigu$", "·27·!·128·");
        data = data.replace("$biguh$", "·27·!·144·");
        data = data.replace("$biguw$", "·27·!·160·");
        data = data.replace("$biguhw$", "·27·!·176·");

        data = data.replace("$drawer$", "·27··112··48··200··100·");
        data = data.replace("$drawer2$", "·27··112··49··200··100·");


        data = data.replace("$enter$", "·13··10·");

        data = data.replace("$letrap$", "·27·!·1·");
        data = data.replace("$letraph$", "·27·!·17·");
        data = data.replace("$letrapw$", "·27·!·33·");
        data = data.replace("$letraphw$", "·27·!·49·");

        data = data.replace("$letrapu$", "·27·!·129·");
        data = data.replace("$letrapuh$", "·27·!·145·");
        data = data.replace("$letrapuw$", "·27·!·161·");
        data = data.replace("$letrapuhw$", "·27·!·177·");


        data = data.replace("$letrag$", "·27·!·0·");
        data = data.replace("$letragh$", "·27·!·16·");
        data = data.replace("$letragw$", "·27·!·32·");
        data = data.replace("$letraghw$", "·27·!·48·");

        data = data.replace("$letragu$", "·27·!·128·");
        data = data.replace("$letraguh$", "·27·!·144·");
        data = data.replace("$letraguw$", "·27·!·160·");
        data = data.replace("$letraguhw$", "·27·!·176·");


        data = data.replace("$letracorte$", "·27·m");
        data = data.replace("$LETRACORTE$", "·27·m");


        data = data.replace("$ENTER$", "·13··10·");

        data = data.replace("$LETRAP$", "·27·!·1·");
        data = data.replace("$LETRAPH$", "·27·!·17·");
        data = data.replace("$LETRAPW$", "·27·!·33·");
        data = data.replace("$LETRAPHW$", "·27·!·49·");

        data = data.replace("$LETRAPU$", "·27·!·129·");
        data = data.replace("$LETRAPUH$", "·27·!·145·");
        data = data.replace("$LETRAPUW$", "·27·!·161·");
        data = data.replace("$LETRAPUHW$", "·27·!·177·");


        data = data.replace("$LETRAG$", "·27·!·0·");
        data = data.replace("$LETRAGH$", "·27·!·16·");
        data = data.replace("$LETRAGW$", "·27·!·32·");
        data = data.replace("$LETRAGHW$", "·27·!·48·");

        data = data.replace("$LETRAGU$", "·27·!·128·");
        data = data.replace("$LETRAGUH$", "·27·!·144·");
        data = data.replace("$LETRAGUW$", "·27·!·160·");
        data = data.replace("$LETRAGUHW$", "·27·!·176·");



        data = data.replace("á", "·160·");
        data = data.replace("à", "·133·");
        data = data.replace("â", "·131·");
        data = data.replace("ä", "·132·");
        data = data.replace("å", "·134·");

        data = data.replace("Á", "·193·");
        data = data.replace("À", "·192·");
        data = data.replace("Â", "·194·");
        data = data.replace("Ä", "·142·");
        data = data.replace("Å", "·143·");


        data = data.replace("é", "·130·");
        data = data.replace("è", "·138·");
        data = data.replace("ê", "·136·");
        data = data.replace("ë", "·137·");
        //data = data.replace("","··");


        data = data.replace("É", "·144·");
        data = data.replace("È", "··");
        data = data.replace("Ê", "··");
        data = data.replace("Ë", "··");

        data = data.replace("ñ", "·164·");
        data = data.replace("Ñ", "·165·");

        //data = data.replace("","··");


        data = data.replace("í", "··");
        data = data.replace("ì", "·141·");
        data = data.replace("î", "·140·");
        data = data.replace("ï", "·139·");
        //data = data.replace("","··");


        data = data.replace("ó", "·149·");
        data = data.replace("ò", "··");
        data = data.replace("ô", "·147·");
        data = data.replace("ö", "·148·");
        //data = data.replace("","··");

        data = data.replace("Ó", "··");
        data = data.replace("Ò", "··");
        data = data.replace("Ô", "··");
        data = data.replace("Ö", "·153·");
        //data = data.replace("","··");

        data = data.replace("ú", "··");
        data = data.replace("ù", "·151·");
        data = data.replace("û", "··");
        data = data.replace("ü", "·129·");
        //data = data.replace("","··");


        data = data.replace("ú", "··");
        data = data.replace("ù", "·151·");
        data = data.replace("û", "··");
        data = data.replace("ü", "·129·");

        //data = data.replace("..", "");

        for (int l = 0; l <= 255; l++) {
            data = data.replace("·" + String.valueOf(l) + "·", String.valueOf(((char) l)));
            data = data.replace("$codepage" + String.valueOf(l) + "$",  String.valueOf(((char) 27)) + "t" + String.valueOf(((char) l)));
        }

        Log.d("here----", ""+data);

        return data;
    }

    //Convert string in Byte asccii to print
//    public static byte[] stringToBytesASCII(String str) {
//        byte[] b = new byte[str.length()];
//        for (int i = 0; i < b.length; i++) {
//            b[i] = (byte) str.charAt(i);
//        }
//        Log.d("bytes=-===", ""+b.toString());
//        return b;
//    }

    public static byte[] stringToBytesASCII(String input) {
//        int length = input.length();
//        byte[] retVal = new byte[length];
//
//        for(int i=0; i<length; i++)
//        {
//            char c = input.charAt(i);
//
//            if (c < 127)
//            {
//                retVal[i] = (byte)c;
//            }
//            else
//            {
//                retVal[i] = (byte)(c - 256);
//            }
//        }
//
//        return retVal;
        return stringToBytesASCIIOK(input);
        // return createImageFromText(100, 500,18 ,input, "Center");
    }




    // generate demo text
    public static String getDemoText(Resources resources, Context context) {
        String dataToPrint = "";

        StringBuilder textData = new StringBuilder();
        textData.append("$codepage32$");
        textData.append("$al_center$$al_center$");

        textData.append("$big$"+M.getBrandName(context)+"$intro$");
        textData.append(M.getRestAddress(context)+"$intro$");
        textData.append("Phone: "+ M.getRestPhoneNumber(context)+"$intro$");
        textData.append("GST# "+ M.getGST(context)+"$intro$");
        textData.append("--------------------------------------$intro$");
        textData.append("Order By : "+ M.getWaitername(context)+"\t $intro$");


        textData.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\n");
        textData.append("ORDER # RES11-121"+"\n");

        textData.append("--------------------------------------\n");
        textData.append("TOKEN # "+21+"\t"+ "dine in" +"\n");



        textData.append("--------------------------------------\n");

        textData.append("Order comment \t");
        textData.append("need spicy" + "\n");

        textData.append("--------------------------------------\n");


        String qty = "1";

        textData.append(padLine(qty + "    Cheese Mayo Fries", 120 + "", 40, " ") + "\n");
        textData.append(padLine(qty + "    Chocolate Milkshake", 130 + "", 40, " ") + "\n");
        textData.append(padLine(qty + "    Veg Sandwich", 100 + "", 40, " ") + "\n");
        textData.append(padLine(qty + "    بيتزا ", 120 + "", 40, " ") + "\n");
        textData.append(padLine(qty + "   بيتزا ", 130 + "", 40, " ") + "\n");
        textData.append(padLine(qty + "   بيتزا ", 100 + "", 40, " ") + "\n");

        textData.append("--------------------------------------\n");

        textData.append("--------------------------------------\n");


        textData.append("SUBTOTAL                    "+350+"\n");
        textData.append("CGST @"+6+"%                    "+21+"\n");
        textData.append("SGST @"+6+"%                    "+21+"\n");



        textData.append("TOTAL       392"+"\n");



        textData.append("CASH                         400"+"\n");
        textData.append("CHANGE                     "+8+"\n");

        textData.append("--------------------------------------\n");


        textData.append("Thank you  "+"Visit Again\n");


//        dataToPrint = dataToPrint + "$codepage0$$intro$";
//        dataToPrint = dataToPrint + Globals.getImageDataPosPrinterLogo(resources);
//
//        dataToPrint = dataToPrint + "$bighw$PosPrinterDriver.com$intro$$intro$";
//        dataToPrint = dataToPrint + "$big$ ESC/POS Types:$intro$ ";
//        dataToPrint = dataToPrint + "$small$ ·36·small·36· ->Small type letter$intro$";
//        dataToPrint = dataToPrint + "$big$ ·36·big·36· ->Big type letter$intro$";
//
//
//        dataToPrint = dataToPrint + "$big$ ESC/POS functions:$intro$ ";
//        dataToPrint = dataToPrint + "$big$ ·36·cut·36·: Cutt paper$intro$ ";
//        dataToPrint = dataToPrint + "$big$ ·36·cutt·36·: Cutt total paper$intro$ ";
//        dataToPrint = dataToPrint + "$big$ ·36·drawer·36·: Open drawer 1 $intro$ ";
//        dataToPrint = dataToPrint + "$big$ ·36·drawer2·36·: Open drawer 2 $intro$ ";
//
//        dataToPrint = dataToPrint + "Specials characters capabilities $intro$";
        //test to find page codes
        //for (int l = 50; l <= 255; l++) {
        //  datos=datos+    "valor "+ String.valueOf(l) + "= ·" + String.valueOf(l) + "·";
        //}
     /*   String defTextToPrint="ABCDEFGHIJKLMNOPQRSTUVWXYZ $intro$aáàâäå  AÁÀÂÄÅ $intro$eéèêë  " +
                "EÉÈÊË$intro$iíìîï IÍÌÎÏ $intro$oóòôö OÓÒÔÖ $intro$uúùûü UÚÙÛÜ $intro$ñ Ñ €  $intro$";



        dataToPrint = dataToPrint + "$codepage0$$intro$";
        dataToPrint = dataToPrint + "Select code page 0 PC437 [U.S.A., Standard Europe]$intro$";
        dataToPrint = dataToPrint + defTextToPrint;

        dataToPrint = dataToPrint + "$codepage1$$intro$";
        dataToPrint = dataToPrint + "Select code page 1 [Katakana]$intro$";
        dataToPrint = dataToPrint + defTextToPrint;

        dataToPrint = dataToPrint + "$codepage2$$intro$";
        dataToPrint = dataToPrint + "Select code page 2 PC850 [Multilingual]$intro$";
        dataToPrint = dataToPrint + defTextToPrint;

        dataToPrint = dataToPrint + "$codepage3$$intro$";
        dataToPrint = dataToPrint + "Select code page 3 PC860 [Portuguese]$intro$";
        dataToPrint = dataToPrint + defTextToPrint;

        dataToPrint = dataToPrint + "$codepage4$$intro$";
        dataToPrint = dataToPrint + "Select code page 4 PC863 [Canadian-French]$intro$";
        dataToPrint = dataToPrint + defTextToPrint;

        dataToPrint = dataToPrint + "$codepage5$$intro$";
        dataToPrint = dataToPrint + "Select code page 5 PC865 [Nordic]$intro$";
        dataToPrint = dataToPrint + defTextToPrint;

        dataToPrint = dataToPrint + "$codepage17$$intro$";
        dataToPrint = dataToPrint + "Select code page 17 PC866 [Cyrillic]$intro$";
        dataToPrint = dataToPrint + defTextToPrint;

        //0 PC437 [U.S.A., Standard Europe]
        //1 Katakana
       // 2 PC850 [Multilingual]
       // 3 PC860 [Portuguese]
       // 4 PC863 [Canadian-French]
       // 5 PC865 [Nordic]
       // 17 PC866 [Cyrillic #2]
        dataToPrint = dataToPrint + "$codepage31$$intro$";
        dataToPrint = dataToPrint + "Select code page 31 HEBREW $intro$";
        dataToPrint = dataToPrint + defTextToPrint;


//


        if (Globals.picturePath != "") {
            dataToPrint = dataToPrint + Globals.getImageData();
        }
        Log.e(internalClassName, "dataToPrint" + dataToPrint);*/
//        dataToPrint = dataToPrint +"$intro$$intro$$intro$$intro$$cutt$$intro$";
        textData.append("$intro$$intro$$intro$$intro$$cutt$$intro$");

        dataToPrint = textData.toString();
        return dataToPrint;
    }

    protected static String padLine(@Nullable String partOne, @Nullable String partTwo, int columnsPerLine, String str){
        if(partOne == null) {partOne = "";}
        if(partTwo == null) {partTwo = "";}
        if(str == null) {str = " ";}
        String concat;
        if((partOne.length() + partTwo.length()) > columnsPerLine) {
            concat = partOne + str + partTwo;
        } else {
            int padding = columnsPerLine - (partOne.length() + partTwo.length());
            concat = partOne + repeat(str, padding) + partTwo;
        }
        return concat;
    }

    protected static String repeat(String str, int i){
        return new String(new char[i]).replace("\0", str);
    }
    public static final byte GS =  0x1D;// Group separator
    //get actual logo data
    public static byte[] getImageData(Bitmap bitmap) {

//        if (Globals.picturePath!=null && Globals.picturePath != "") {
//            if (Globals.logoProcesed.length() > 0) {
//                //response with calculated logo data text
//                return Globals.logoProcesed;
//            } else {
//                byte[] bytes1  = new byte[4];
//                bytes1[0] = GS;
//                bytes1[1] = 0x76;
//                bytes1[2] = 0x30;
//                bytes1[3] = 0x00;
//
//                byte[] bytes2 = BytesUtil.getBytesFromBitMap(bitmap);

        return getBytesFromBitMap(bitmap, 32);
//            }
//        } else {
//            return "";
//        }
    }

    public static byte[] stringToBytesASCIIOK(String str) {
        String TAG = "posprinterdriver_AsyncNetPrint";

        byte[] b = new byte[0];
        try {
            b = str.getBytes("US-ASCII");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }


//        byte[] b = new byte[str.length()];
//        if (str.length() > 0) {
//            Log.i(TAG, "                 Caracter de 2 partes=" + str + " ->parte1=" + str.charAt(0) + "->" + str.charAt(1));
//
//        }
//      for (int i = 0; i < b.length; i++) {
//
//          b[i] = (byte) str.charAt(i);
//
//
//      }
        for (int i = 0; i < b.length; i++) {

            b[i] = (byte) str.charAt(i);
            Log.i("", "                CAdena encontrada=" + i + " ->parte1=" + str.charAt(i) + " ->parte1=" + (int) str.charAt(i));

        }

        return b;

    }

我有 Android 应用程序,它与热敏打印机的英文打印效果非常好。代码很完美。但问题是当我传递阿拉伯字符或任何其他 Unicode 时,它​​无法正确打印。

问题出在代码页上。在将字符串转换为字节时,我尝试了支持阿拉伯语和 Unicode 的不同代码页。它在日志中也显示了正确的阿拉伯语字符串,但是当它打印时它不起作用。

注意:我的打印机支持阿拉伯语,代码页为 32。我需要通用打印机解决方案。我没有使用爱普生 SDK。我正在使用 ESC/POS 命令。

最佳答案

最简单的方法是使用 Epson SDK;因为它不关心它是否是 Epson 打印机 - 只有 USB 设备的设备过滤器中的供应商 ID 在供应商之间有所不同;但 Star Micronics 和其他 100% 兼容的设备工作得很好。如果您想编写自己的驱动程序,这实际上意味着重新发明轮子;看看ESC/POS附录 C,第 73 页:

对于阿拉伯语,您需要使用 ESC t 命令选择字符表 13,即 IBM 代码页 CP864 .顺序是:\x1B\x74\xD。输出还必须编码为 CP864,从 UTF-16 转换,以便与打印机期望的代码页相匹配。

关于java - Android热敏打印机阿拉伯语问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53909331/

有关java - Android热敏打印机阿拉伯语问题的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  5. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  6. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

随机推荐