为什么将欧元符号打印为 Ôé1/4?



我有一个配置了代码页 858 的爱普生 tm-t20。我对代码页进行了测试打印,字符很好。Java 类采用 UTF-8 编码。我正在尝试打印一些在已经命名的代码页中存在éç等字符的文本。

打印机与以下文档版本兼容:

Arrays.stream(service.getSupportedDocFlavors()).forEach(f->System.out.println(f.getMediaType()+":"+f.getMimeType()+":"+f.getRepresentationClassName()));
image:image/gif:[B
image:image/gif:java.io.InputStream
image:image/gif:java.net.URL
image:image/jpeg:[B
image:image/jpeg:java.io.InputStream
image:image/jpeg:java.net.URL
image:image/png:[B
image:image/png:java.io.InputStream
image:image/png:java.net.URL
application:application/x-java-jvm-local-objectref:java.awt.print.Pageable
application:application/x-java-jvm-local-objectref:java.awt.print.Printable
application:application/octet-stream:[B
application:application/octet-stream:java.net.URL
application:application/octet-stream:java.io.InputStream

到目前为止,我尝试了:

Attemp 1:使用输入流

public static void print(){
InputStream bytes = new ByteArrayInputStream(("Estó ès una pruebà rn Hola qu€ tal").getBytes());    
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
DocPrintJob pj = service.createPrintJob();
Doc doc = new SimpleDoc(bytes, flavor, null);
pj.print(doc, null);
}

输出:

Estó ès una pruebà
Hola quÔé¼ tal

收件人 2:带字节 [],输出相同

public static void print(){
byte[] bytes = new String("Estó ès una pruebà rn Hola qu€ tal").getBytes(Charset.forName("UTF-8"));
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
DocPrintJob pj = service.createPrintJob();
Doc doc = new SimpleDoc(bytes, flavor, null);
pj.print(doc, null);
}

知道可能出了什么问题吗?

这是一个棘手的问题。如果要打印欧元符号和其他符号,则必须使用 unicode。

使用 unicode 打印欧元符号的示例

System.out.println("u20ac");

但是,检查这个问题 使用 unicode 显示欧元符号并将字符更改为大写,看看 andrewdotn 的答案,它真的得到了很好的解释。

您应该能够使用 try 2,但有一个更改:使用Charset.forName时,您不应该传递 UTF-8 作为字符集,而应该传递"Cp858"(由支持的 Java 编码文档给出(。编码应基于打印机预期的代码页,Java 源代码为 UTF-8 的事实与此转换无关。

这是编码问题。平台的默认字符集必须将欧元符号视为垃圾字符。 作为预防措施,您需要使用这些读取和写入操作传递字符集。 阅读这篇文章: https://www.geeksforgeeks.org/java-io-inputstreamreader-class/

最新更新