javadbf中文问题的解决

最近发现读取中文是没有问题的,但写入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。

 

转自:http://ivan.iteye.com/blog/46126

你可能感兴趣的:(java,dbf,dbf中文乱码)