如何在Java中读取CP895(Kamenicky)编码的DBF文件

时间:2013-07-19 12:50:12

标签: java encoding character-encoding dbf

我有一个用CP895(Kamenicky)编码的DBF文件,我想用Java读取它。 如何将CP895重新编码为UTF8?

1 个答案:

答案 0 :(得分:0)

第一步 - 创建Kamenicky角色表:

  

public static char [] getKamenickyCharTable(){             char [] map = {'\ u0000','\ u0001','\ u0002','\ u0003','\ u0004','\ u0005','\ u0006','\ u0007','\ u0008' ,'\ u0009','\ n','\ u000B',   '\ u000C','\ r','\ u000E','\ u000F',                     '\ u0010','\ u0011','\ u0012','\ u0013','\ u0014','\ u0015','\ u0016','\ u0017','\ u0018','\ u0019', '\ u001A','\ u001B','\ u001C',   '\ u001D','\ u001E','\ u001F',                     '\ u0020','\ u0021','\ u0022','\ u0023','\ u0024','\ u0025','\ u0026','\'','\ u0028','\ u0029', '\ u002A','\ u002B','\ u002C',   '\ u002D','\ u002E','\ u002F',                     '\ u0030','\ u0031','\ u0032','\ u0033','\ u0034','\ u0035','\ u0036','\ u0037','\ u0038','\ u0039', '\ u003A','\ u003B','\ u003C',   '\ u003D','\ u003E','\ u003F',                     '\ u0040','\ u0041','\ u0042','\ u0043','\ u0044','\ u0045','\ u0046','\ u0047','\ u0048','\ u0049', '\ u004A','\ u004B','\ u004C',   '\ u004D','\ u004E','\ u004F',                     '\ u0050','\ u0051','\ u0052','\ u0053','\ u0054','\ u0055','\ u0056','\ u0057','\ u0058','\ u0059', '\ u005A','\ u005B','\',   '\ u005D','\ u005E','\ u005F',                     '\ u0060','\ u0061','\ u0062','\ u0063','\ u0064','\ u0065','\ u0066','\ u0067','\ u0068','\ u0069', '\ u006A','\ u006B','\ u006C',   '\ u006D','\ u006E','\ u006F',                     '\ u0070','\ u0071','\ u0072','\ u0073','\ u0074','\ u0075','\ u0076','\ u0077','\ u0078','\ u0079', '\ u007A','\ u007B','\ u007C',   '\ u007D','\ u007E','\ u007F',                     '\ u010C','\ u00FC','\ u00E9','\ u010F','\ u00E4','\ u010E','\ u016​​4','\ u010D','\ u011B','\ u011A', '\ u0139','\ u00CD','\ u013E',   '\ u013A','\ u00C4','\ u00C1',                     '\ u00C9','\ u017E','\ u017D','\ u00F4','\ u00F6','\ u00D3','\ u016​​F','\ u00DA','\ u00FD','\ u00D6', '\ u00DC','\ u016​​0','\ u013D',   '\ uDDD','\ u0158','\ u016​​5',                     '\ u00E1','\ u00ED','\ u00F3','\ u00FA','\ u0148','\ u0147','\ u016​​E','\ u00D4','\ u016​​1','\ u0159', '\ u0155','\ u0154','\ u00BC',   '\ u00A1','\ u00AB','\ u00BB',                     '\ u2591','\ u2592','\ u2593','\ u2502','\ u2524','\ u2561','\ u2562','\ u2556','\ u2555','\ u2563', '\ u2551','\ u2557','\ u255D',   '\ u255C','\ u255B','\ u2510',                     '\ u2514','\ u2534','\ u252C','\ u251C','\ u2500','\ u253C','\ u255E','\ u255F','\ u255A','\ u2554', '\ u2569','\ u2566','\ u2560',   '\ u2550','\ u256C','\ u2567',                     '\ u2568','\ u2564','\ u2565','\ u2559','\ u2558','\ u2552','\ u2553','\ u256B','\ u256A','\ u2518', '\ u250C','\ u2588','\ u2584',   '\ u258C','\ u2590','\ u2580',                     '\ u03B1','\ u00DF','\ u0393','\ u03C0','\ u03A3','\ u03C3','\ u00B5','\ u03C4','\ u03A6','\ u0398', '\ u03A9','\ u03B4','\ u221E',   '\ u03C6','\ u03B5','\ u2229',                     '\ u2261','\ u00B1','\ u2265','\ u2264','\ u2320','\ u2321','\ u00F7','\ u2248','\ u00B0','\ u2219', '\ u00B7','\ u221A','\ u207F',   '\ u00B2','\ u25A0','\ u00A0'};             返回地图;         }

第二步 - 从DBF读取字节并编码字符:

                  byte[] bytes = column.getBytes();

                  for (int x = 0; x < bytes.length; x++) {
                      int index = (0xff) & bytes[x];
                      char c = getKamenickyCharTable()[index];
                  }