当前位置: 首页 > 知识库问答 >
问题:

使用输出流写入器进行套接字编程

柴飞扬
2023-03-14

先说明我的问题。我已经在这里张贴了另一个类似的问题:PrintStream不能正确打印unicode字符(UTF-16 ),但不知何故我没有设法克服这个问题。

我想从android打印到网络打印机(施乐WC 24 PCL或者爱普生XP-600)。< br >假设:

Socket client = new Socket(_IP, PORT);     // IP, port

我有以下文字:

String[] str =  {   "-------------------------------------------------\r\n",
                " ΠΕΛΑΤΗΣ   : Γεια σου Πελάτη\r\n",
                " ΚΩΔΙΚΟΣ   : 00000234242\r\n",
                " ΔΙΕΥΘΗΝΣΗ     : Περικλέους 77\r\n",
                " ΤΗΛ.      : 2310-892345\r\n",
                             "-------------------------------------------------\r\n"
            };

然后我用“ISO-8859-7”、“Windows-1253”(希腊字符)调用以下代码:

OutputStreamWriter oStream = new OutputStreamWriter(os, Charset.forName(enc).newEncoder());

    for(int i =0; i< str.length; i++) {

        oStream.write(str[i]);



        oStream.flush();
    }

           oStream.close();

但是打印机的结果(在eclipse控制台中是可以的)我得到了垃圾,比如:

  -------------------------------------------------
   ÅéùêåÛ   : èÛæÅéùêåÛ
   èÛæÅ     : 00000234242
   Åéùêå : ÛÅéùêåÛ
   ñ÷æÅ     : 2310-892345
  -------------------------------------------------

哪些是扩展的ASCII字符在这里找到:http://www.ascii-code.com/ 谁能告诉我如何告诉打印机打印正确格式的字符?对于希腊语字符是“ISO-8859-7”,“Windows-1253”,“Cp1253”。阿拉伯语字符的解决方案在这里,但它至少对我不起作用:通过java中的套接字的Unicode文本

此外,PLC ISO 8859 7没有成功。我发送以下字符串:

"\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c2\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\r\n",

" \033(12N\r\n)," a b càaáácèééééééééóúúüü\ r \ n ",

我运气不好

共有2个答案

孙思源
2023-03-14

我的问题的答案很简单。我必须为特定的打印机编写一个打印机驱动程序,这样我就可以打印unicode、希腊语、日语或其他任何字符。只有socket没有这种方法,至少在我的“unicode”案例中是这样。

游勇军
2023-03-14

对于 PCL 打印机,可以发送 PCL 命令来更改符号集。如果我正确阅读了此源和此源,并且有问题的打印机支持它,则可以使其使用ISO-8859-7符号集:

oStream.write("\033(12N");
 类似资料:
  • 问题内容: 我有一个Java应用程序,即Voip。我正在使用一个套接字通过线程同时发送和接收信息。代码如下所示。 我发现的问题是,当我写入输出流时,它在第一次写入时阻塞。我发送的字节数不多。贝娄是我的写代码。 读取声音代码的另一个线程是… 我已经在实际代码中注释了很大一部分,因为我只是想使其正常工作。我的写函数在第一次写时无限期阻塞。这可能是我的线程有问题吗?我唯一的想法是输出和输入流共享我的套接

  • Netty TCP Server在端口处运行,接收格式的数据。它使用Marine API库将胡言乱语转换为需要从套接字输入流的有意义的信息。 如何获得正在使用的netty服务器端口的输入流?

  • 我有几个输出侦听器正在实现。它可以是写到stdout或文件的,也可以是写到内存或任何其他输出目标;因此,我在方法中指定作为(an)参数。 现在,我收到了。在这里向流写入的最佳方式是什么? 我应该只使用吗?我可以给它字节,但如果目标流是字符流,那么它会自动转换吗? 我需要用这里的一些桥流来代替吗?

  • 问题内容: 我有几个正在实现OutputStream的输出侦听器。它可以是写到stdout或文件的PrintStream,也可以写到内存或任何其他输出目标。因此,我在方法中将OutputStream指定为参数。 现在,我已经收到了字符串。在此处写入流的最佳方法是什么? 我应该只使用Writer.write(message.getBytes())吗?我可以给它提供字节,但是如果目标流是字符流,那么它

  • 问题内容: 有人可以解释一下Java套接字中的以下行为: 总体思路是这样的: 打开套接字,获取I / O流。 写请求,关闭流 读取响应,关闭流 关闭插座。 这是我的问题。 如果我将a 用于输出,然后将其关闭,则它将关闭整个套接字,并且随后的读取操作将失败。 相反,如果我直接使用套接字的方法,它将正确关闭输出流通道,同时使套接字保持活动状态。 为什么关闭对象会使整个插槽都掉下来? 问题答案: 这可能

  • 我使用一个具有双向通信的套接字设置了一个客户端-服务器模型。 应该是这样的:1。客户端-发送单词数组2。服务器-读取单词数组3。服务器-发送布尔值4。客户端-读取布尔值5。客户端-发送图像6。服务器读取图像 这个过程在一个循环中,与第一次迭代完美配合,但在第二次迭代中,我得到了以下错误: JAVA网SocketException:软件导致的连接中止:套接字写入错误 我认为发生的是,当服务器返回到读