Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将java中的unicode转换为正确的字符集,以便在联机打印机上打印_Java_Unicode_Printing_Data Conversion - Fatal编程技术网

如何将java中的unicode转换为正确的字符集,以便在联机打印机上打印

如何将java中的unicode转换为正确的字符集,以便在联机打印机上打印,java,unicode,printing,data-conversion,Java,Unicode,Printing,Data Conversion,我正在使用Star TSP700打印机的直接打印。打印机设置为852 Latin-2。所以,在我将文本发送到打印机之前,我将其转换为“IBM852”,但它不工作。我在角色之间得到了很多不需要的/未知的字符。这发生在打印机打印Š,Ž,Ž和š,ž,č的地方。我认为UNICODE字符串表示和接受ASCII字符的打印机有问题吗?有人能帮忙吗 转换为IBM852 public static String c( String p_tekst, String p_cp ) throws Unsupported

我正在使用Star TSP700打印机的直接打印。打印机设置为852 Latin-2。所以,在我将文本发送到打印机之前,我将其转换为“IBM852”,但它不工作。我在角色之间得到了很多不需要的/未知的字符。这发生在打印机打印Š,Ž,Ž和š,ž,č的地方。我认为UNICODE字符串表示和接受ASCII字符的打印机有问题吗?有人能帮忙吗

转换为IBM852

public static String c( String p_tekst, String p_cp ) throws UnsupportedEncodingException {
  byte b[] = p_tekst.getBytes( p_cp );
  String w_charset;
  w_charset = new String(b);
  return w_charset;
}
写入打印机-我将转换后的字符串发送为:

FileWriter out = new FileWriter("lpt3");
out.write(...);
out.close();
我认为一定有一些方法可以在不浪费大量纸张的情况下学习java中的字符编码,但如果您真的必须这样做,那么:

您需要使用
getBytes()
重载,该重载接受
字符串charsetName
作为参数,以便获得
852拉丁-2
字符集中的字节数组。然后,您不能再将其转换回字符串;相反,您需要使用
OutputStream
将这些字节写入打印机

或者,您可以使用为右侧
字符集构建的
OutputStreamWriter
将字符串直接写入打印机

编辑

这里有一个例子。我不想尝试,因为我不想浪费纸张。我假设你的“lpt3”是有效的,因为你说你设法打印了一些东西,尽管是用了错误的字符集

public static void main( String[] args ) throws Exception
{
    Charset charset = Charset.forName( "Cp852" );
    try( OutputStream outputStream = new FileOutputStream("lpt3") )
    {
        try( Writer writer = new OutputStreamWriter( outputStream, charset ) )
        {
            writer.write( "╔════════════════════════════════════════╗" );
            writer.write( "║ this will be printed in MS-DOS Latin-2 ║" );
            writer.write( "╚════════════════════════════════════════╝" );
        }
    }
}

第一个问题是您使用的是
FileWriter
,它实际上将使用您的平台默认编码。有什么理由不使用Java打印机API而这样做吗?没有,因为我是Java编程新手。你能告诉我一些例子吗?我会先搜索“Java打印”之类的东西。虽然这些主要是围绕打印文件从图形等,我会添加一个围绕文本的答案。。。(或者我会的,但是迈克的回答很好。)顺便说一句,你的名字绝对值得研究。一种叫做
c
的方法很难自我描述:)请举个例子好吗?@Matej我修改了我的答案。迈克,谢谢。我已经绞尽脑汁好几个小时了,可能在网上阅读了每一篇贴有相关标签的帖子。很好用。很高兴能帮上忙,Matej!Mike问了另一个关于上述解决方案的问题。当打印机未准备好或未关闭时,。。。java抛出错误大约需要5分钟。有没有办法加快速度?