私の製品は、組み込みのAndroidを使用した産業用計測器です。機器は、あらかじめ選択されたネットワークプリンタまたはUSBプリンタに結果を印刷する必要があります。機器のオペレータは、標準のAndroidプリンタインターフェイスに負担をかけることはできず、クラウド印刷は受け入れられません。私は、この状況は、Android搭載の製品(POSサーマルプリンタなど)でかなり一般的だと思うでしょう。組み込みのAndroidからUSBまたはあらかじめ選択されたネットワークプリンタに印刷
ネットワーク上で使用可能なプリンタを見つけてIPアドレスとポート番号を返すコードがあります。 ANSIテキストをプリンタに送信します。ただし、Unicode文字は正しく印刷されません。他のいくつかのANSI以外の文字も印刷されます(ヨーロッパの文字の一部)。私はこれがデフォルトの "シンボルセット"のためだと信じています。
私はPCLまたはIPPを使用してプリンタを制御することを期待しています。 "@PCL"で始まるすべてのテキストがプレーンテキストとして出力されます。 ESCで始まるすべてのテキストは印刷されませんが、私はそのようなコマンドが処理されているとは思わないでしょう。
「ウェブ」を検索すると、この質問が数回尋ねられましたが、よく答えられません。
私のSocket/InputStream/BufferedReaderの使用に何か問題があるかどうかは疑問です。
誰もこの用途のためのソリューションを設計しましたか?
final char ESC = 0x1b;
final String UEL = ESC + "%-12345X";
final String CRLF = "\r\n";
Socket socket = new Socket(printer.getIpAddr(), 9100);
InputStream inputStream = socket.getInputStream();
DataOutputStream oStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
write(oStream, UEL + "@PJL" + "\r\n");
write(oStream, "@PJL COMMENT some comments" + CRLF);
write(oStream, "@PJL ECHO RRE" + CRLF);
write(oStream, UEL + "\r\n");
oStream.flush();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int count = bufferedInputStream.available();
ローカル 'write'メソッドは、Java StringからUTF-8でバイト配列を作成し、バイトをストリームに書き込みます。これらの文字の場合、UTF-8はANSI