Java编码转换的源码

由于要做打印机中文打印,使用Java调用打印机串口打印。

打印机内部已经包含GBK中文字符集,在发送打印指令后发现不能正常打印,很是疑惑。

经确认原因如下:

Java文件使用UTF-8保存,打印字符为中文,调用OutputStream打印时String cmd转换为bytes[]时,使用如下方法:

cmd.toBytes("GBK");

现状

Java文件编码   encoding结果
UTF-8UTF-8NG
UTF-8GBKOk
GBKGBKOK
GBKUTF-8NG

结论:由于打印机只能使用GBK字符集,所以只要编码后能够使用GBK字符集转换就行了。

Java文件的保存格式没有关系。

以下是我的测试代码,如有问题可以交流。

package testsource;

import java.io.*;

/**
 * @author zivey 2008/02/26 15:34:22
 *
 */

public class FileWriter {
 public static void main(String[] args) throws Exception {
  FileWriter t = new FileWriter();
  int i =0;
  String sourceStrig = "中国china";
  t.Write(sourceStrig,null,"c:/test"+i+0+".txt");
  t.Write(sourceStrig,"GBK","c:/test"+i+1+".txt");
  t.Write(sourceStrig,"UTF-8","c:/test"+i+2+".txt");
  t.Write(sourceStrig,"US-ASCII","c:/test"+i+3+".txt");
  t.Write(new String(sourceStrig.getBytes("GBK"),"UTF-8"),null,"c:/test"+i+4+".txt");
  t.Write(new String(sourceStrig.getBytes("UTF-8"),"UTF-8"),null,"c:/test"+i+5+".txt");
  t.Write(new String(sourceStrig.getBytes("GBK"),"GBK"),null,"c:/test"+i+6+".txt");
  t.Write(new String(sourceStrig.getBytes("UTF-8"),"UTF-8"),null,"c:/test"+i+7+".txt");
  t.Write(new String(sourceStrig.getBytes("ISO-8859-1"),"GBK"),null,"c:/test"+i+8+".txt");
  t.Write(new String(sourceStrig.getBytes("ISO-8859-1"),"UTF-8"),null,"c:/test"+i+9+".txt");
 }

 void Write(String message, String fileType,String fileName) {
  try {
   File file = new File(fileName);
   if (!file.exists()) {
    file.createNewFile();
   }
   OutputStream fileOut = new FileOutputStream(file, true);
   Writer fileWriter;
   if (fileType == null) {
    fileWriter = new OutputStreamWriter(fileOut);
   } else {
    fileWriter = new OutputStreamWriter(fileOut, fileType);
   }
   fileWriter.write(message);
   fileWriter.close();
   fileOut.close();
  } catch (Exception e) {
  }
  System.out.println("write file ok,file name:"+fileName);
 }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigIcicle

感谢您的支持,我会继续熬夜的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值