)的中文支持问题,由于我测试得不够仔细就忽略掉了。最近发现读取中文是没有问题的,但写入dbf的时候就会产生乱码。
设了几个断点之后跟踪发现是Utils中的textPadding方法有错,原来的方法是
public static byte[] textPadding( String text, String characterSetName, int length, int alignment, byte paddingByte) throws java.io.UnsupportedEncodingException { if( text.length() >= length) { return text.substring( 0, length).getBytes( characterSetName); } byte byte_array[] = new byte[ length]; Arrays.fill( byte_array, paddingByte); switch( alignment) { case ALIGN_LEFT: System.arraycopy( text.getBytes( characterSetName), 0, byte_array, 0, text.length()); break; case ALIGN_RIGHT: int t_offset = length - text.length(); System.arraycopy( text.getBytes( characterSetName), 0, byte_array, t_offset, text.length()); break; } return byte_array; }
我改为了
public static byte[] textPadding(String text,String characterSetName, int length,int alignment,byte paddingByte) throws java.io.UnsupportedEncodingException { byte[] srcByteArray=text.getBytes(characterSetName); byte[] dstByteArray=new byte[length]; Arrays.fill(dstByteArray,paddingByte); int dstLength=0; if(srcByteArray.length>=length) { dstLength=length%2==0?length:length-1; }else { dstLength=srcByteArray.length; } switch(alignment) { case ALIGN_LEFT: System.arraycopy(srcByteArray,0,dstByteArray,0,dstLength); break; case ALIGN_RIGHT: System.arraycopy(srcByteArray,0,dstByteArray,length-dstLength,dstLength); break; } return dstByteArray; }
中文输出完全正常了。
附件是打过补丁后的javadbf.jar。