DotSpatial - 如何在dbf文件中正确保存土耳其语符号(如'ə''ü'等)? (或者如何在保存形状文件时更改编码)

时间:2017-08-02 06:50:48

标签: c# encoding utf-8 arcgis dotspatial

我需要将土耳其符号添加到形状文件中。但我无法在保存形状文件中更改编码。以下是我的代码段:

public class RulesDriver extends Configured implements Tool {

    private static Logger LOGGER = LoggerFactory.getLogger(RulesDriver.class);

    RuleValidationService aWSS3Service = new RuleValidationService();
    HashMap<String, Object> dataMap = new HashMap<String, Object>();
    HashMap<String, String> controlMap = new HashMap<String, String>();
    public String inputPath = "";
    public String outputPath = "";
    private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
    ControlFileReader ctrlReader = new ControlFileReader();
    CSVToExcel csv2Excel = new CSVToExcel();
    HashMap<Integer,String> countMap = new HashMap<Integer,String>();
    HashMap<String,Integer> numberValueMap = new HashMap<String,Integer>();
    HashMap<String,Object> rulesMap = new HashMap<String,Object>();
    CharsetConvertor charsetConvertor = new CharsetConvertor();
    ControlFileComparison controlFileComparison = new ControlFileComparison();
    boolean isControlFileValid = false;

    public static void main(String[] args) throws Exception {
        int res = ToolRunner.run(new Configuration(), new RulesDriver(), args);
        System.exit(res);
    }

    @Override
    public int run(String[] args) throws Exception {
        LOGGER.info("HADOOP MapReduce Driver started");
        if (args.length < 3) {
            LOGGER.info("Args ");
            return 1;
        }
        int j = -1;

        //Prop - Starts
        String cacheBucket = args[0];
        String s3accesskey = args[1];
        String s3accesspass = args[2];
        //Prop - ends
        // file2InputPath Value is from DB
        String file2InputLocation = "";
        String fileComparisonInd = "";
        String inputPath = "";
        String outputPath = "";
        String url = "";
        String userId = "";
        String password = "";
        String fileType = "";
        String ctrlCompResult = "N";


        try {
            Configuration conf = new Configuration();
            Properties prop = new Properties();
            //Prop - starts
            prop.setProperty("qatool.cacheBucket", cacheBucket);
            prop.setProperty("qatool.s3accesskey", s3accesskey);
            prop.setProperty("qatool.s3accesspass", s3accesspass);
            String propertiesFile = aWSS3Service.getObjectKey(cacheBucket, "application",prop);
            if(null==propertiesFile && "".equals(propertiesFile)){
                return 0;
            }
            S3Object s3Object = aWSS3Service.getObject(cacheBucket, propertiesFile, prop);
            LOGGER.info("Loading App properties");
            InputStreamReader in = new InputStreamReader(s3Object.getObjectContent());
            Properties appProperties = new Properties();
            try {
                appProperties.load(in);
                prop.putAll(appProperties);
                LOGGER.info(" ",prop);
            }
            catch (IOException e1) {
                LOGGER.error("Exception while reading properties file :" , e1);
                return 0;
            }

            initialize(prop);
            if (!(dataMap == null)) {
                if (("N").equals(dataMap.get("SuccessIndicator"))) {
                    return 0;
                }
                List value = (ArrayList) dataMap.get("LookUpValList");
                LOGGER.info("lookUpVallist",value);
            }
            if (dataMap != null) {
                controlMap = (HashMap<String, String>) dataMap.get("ControlMap");
            }
            if (controlMap != null) {
                inputPath = (prop.getProperty("qatool.rulesInputLocation") + "/").concat((String) dataMap.get("InputFileName")); //TEMP
                LOGGER.info(inputPath);
                fileType = (String) dataMap.get("FileType");
            } else {
                inputPath = (prop.getProperty("qatool.rulesInputLocation") + "/").concat((String) dataMap.get("InputFileName"));
                LOGGER.info(inputPath);
                fileType = (String) dataMap.get("FileType");
            }
            rulesMap = (HashMap<String,Object>)dataMap.get("RulesMap");
            isControlFileValid = controlFileComparison.compareControlFile(controlMap, aWSS3Service, prop, rulesMap); //TEMP
            LOGGER.info("isControlFileValid in driver : "+isControlFileValid);
            if(isControlFileValid){
                ctrlCompResult = "Y";
            }
            conf.set("isControlFileValid", ctrlCompResult);
            // ** DATABASE Connection **/
            String ctrlFileId = controlMap.get("ControlFileIdentifier");
            url = prop.getProperty(QaToolRulesConstants.DB_URL);
            userId = prop.getProperty(QaToolRulesConstants.DB_USER_ID);
            password = prop.getProperty(QaToolRulesConstants.DB_USER_DET);
            InpflPrcsSumm inpflPrcsSumm = new InpflPrcsSumm();
            DBConnectivity dbConnectivity = new DBConnectivity(url, userId, password);
            inpflPrcsSumm = dbConnectivity.getPreviousFileDetail(ctrlFileId);
            dbConnectivity.closeConnection();
            LOGGER.info( " inpflPrcsSumm.getPrevFileId() " + inpflPrcsSumm.getPrevFileId());
            prop.setProperty(QaToolRulesConstants.PREV_FILE_ID, inpflPrcsSumm.getPrevFileId().toString());
            file2InputLocation = inpflPrcsSumm.getPrevFileLocation();
            boolean file2Available = file2InputLocation.isEmpty();
            String folderPath = "";
            String bucket = "";
            if (!file2Available) {
                String arr[] = file2InputLocation.split("/");
                if(file2InputLocation.startsWith("http")){
                    bucket = arr[3];
                }else{
                    bucket = arr[2];
                }
                folderPath = file2InputLocation.substring(file2InputLocation.lastIndexOf(bucket) + bucket.length() + 1, file2InputLocation.length());
            }
            // File 2 input path
            prop.setProperty("qatool.file2InputPath", file2InputLocation);
            if(!file2Available){
                file2InputLocation = file2InputLocation + "/Success";
                String file2Name = aWSS3Service.getObjectKey(bucket, folderPath,prop);
                LOGGER.info("bucket->"+bucket);
                LOGGER.info("folderPath->"+folderPath);
                file2Name = file2Name.substring(file2Name.lastIndexOf("/")+1, file2Name.length());
                prop.setProperty("file2Name", (null!=file2Name  && "".equals(file2Name))?"":file2Name);
                LOGGER.info(prop.getProperty("file2Name"));
            }
            prop.setProperty("qatool.auditPrevFolderPath", folderPath);
            prop.setProperty("qatool.auditBucketPrevFolderPath", bucket);
            LOGGER.info("ctrlFileId : " + ctrlFileId);
            LOGGER.info("BUCKET : " + bucket);
            LOGGER.info("folder : " + folderPath);
            Date dateobj = new Date();
            outputPath = (String) prop.getProperty("qatool.rulesOutputLocation") + "/" + dateFormat.format(dateobj); //TEMP
            fileComparisonInd = controlMap.get("FileComparisonIndicator");
            Gson gson = new Gson();
            String propSerilzation = gson.toJson(prop);
            conf.set("application.properties", propSerilzation);
            Job job = Job.getInstance(conf);
            job.setJarByClass(RulesDriver.class);

            job.setJobName("Rule Validation and Comparison");
            job.getConfiguration().set("fs.s3n.awsAccessKeyId", (String) prop.getProperty("qatool.s3accesskey"));
            job.getConfiguration().set("fs.s3n.awsSecretAccessKey", (String) prop.getProperty("qatool.s3accesspass"));
            job.getConfiguration().set("fs.s3.awsAccessKeyId", (String) prop.getProperty("qatool.s3accesskey"));
            job.getConfiguration().set("fs.s3.awsSecretAccessKey", (String) prop.getProperty("qatool.s3accesspass"));
            job.getConfiguration().set("fs.s3a.awsAccessKeyId", (String) prop.getProperty("qatool.s3accesskey"));
            job.getConfiguration().set("fs.s3a.awsSecretAccessKey", (String) prop.getProperty("qatool.s3accesspass"));
            job.getConfiguration().set("fs.s3n.endpoint", "s3.amazonaws.com");
            job.getConfiguration().set("fs.s3.endpoint", "s3.amazonaws.com");
            job.getConfiguration().set("fs.s3a.endpoint", "s3.amazonaws.com");


            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(Text.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(Text.class);
            job.setReducerClass(RulesCountReducer.class);
            job.setNumReduceTasks(1);
            job.setMaxMapAttempts(1);
            job.setMaxReduceAttempts(1);

            if("UTF-16".equalsIgnoreCase(controlMap.get("FileCodePage"))){
                convertEncoding((String)dataMap.get("InputFileName"),rulesInputLocation,prop);
                if (!file2Available && "Y".equals(ctrlCompResult)) {
                    convertEncoding(inpflPrcsSumm.getPrevFileName(),file2InputLocation,prop);
                }
            }
            LOGGER.info("fileComparisonInd + "+ fileComparisonInd + " file2Available + " + file2Available + " ctrlCompResult + " + ctrlCompResult);
            if (fileType != null && fileType.equals(QaToolRulesConstants.INPUT_FILE_TYPE_DELIMI)) {
                job.setInputFormatClass(TextInputFormat.class);
                job.setOutputFormatClass(TextOutputFormat.class);
                MultipleInputs.addInputPath(job, new Path(rulesInputLocation), TextInputFormat.class, TextRulesMapper.class);
                if (fileComparisonInd.equalsIgnoreCase(QaToolRulesConstants.FILE_COMP_INDICATOR) && !file2Available && "Y".equals(ctrlCompResult)) {
                    Path file2InputPath = new Path(file2InputLocation);
                    if (isInputPathAvail(file2InputPath, conf)) {
                        MultipleInputs.addInputPath(job, file2InputPath, TextInputFormat.class, TextRulesMapperFile2.class);
                    }
                }
            } else if (fileType != null && fileType.equals(QaToolRulesConstants.INPUT_FILE_TYPE_EXCEL)) {
                job.setInputFormatClass(ExcelInputFormat.class);
                job.setOutputFormatClass(TextOutputFormat.class);
                MultipleInputs.addInputPath(job, new Path(rulesInputLocation), ExcelInputFormat.class, ExcelMapper.class);
                String inputFileName = controlMap.get("InputFileName");
                String fileExtn = inputFileName.substring(inputFileName.lastIndexOf(".") + 1);
                prop.setProperty("File", "Excel");
                prop.setProperty("fileExtension", fileExtn);
                if (fileComparisonInd.equalsIgnoreCase(QaToolRulesConstants.FILE_COMP_INDICATOR) && !file2Available && "Y".equals(ctrlCompResult)) {
                    Path file2InputPath = new Path(file2InputLocation);
                    if (isInputPathAvail(file2InputPath, conf)) {
                        MultipleInputs.addInputPath(job, file2InputPath, ExcelInputFormat.class, ExcelMapper2.class);
                    }
                }
            } else if (fileType != null && fileType.equals(QaToolRulesConstants.INPUT_FILE_TYPE_FIXED)) {
                prop.setProperty("File", "DAT");
                MultipleInputs.addInputPath(job, new Path(rulesInputLocation), TextInputFormat.class, FixedWidthMapper.class);
                if (fileComparisonInd.equalsIgnoreCase(QaToolRulesConstants.FILE_COMP_INDICATOR) && !file2Available && "Y".equals(ctrlCompResult)) {
                    Path file2InputPath = new Path(file2InputLocation);
                    if (isInputPathAvail(file2InputPath, conf)) {
                        MultipleInputs.addInputPath(job, file2InputPath, TextInputFormat.class, FixedWidthMapper2.class);
                    }
                }
            }
            MultipleOutputs.addNamedOutput(job, "error", TextOutputFormat.class, Text.class, Text.class);
            MultipleOutputs.addNamedOutput(job, "success", TextOutputFormat.class, Text.class, Text.class);
            MultipleOutputs.addNamedOutput(job, QaToolRulesConstants.ADDED_DELETED, TextOutputFormat.class, Text.class, Text.class );
            /*MultipleOutputs.addNamedOutput(job, QaToolRulesConstants.ADDED_UPDATED, TextOutputFormat.class, Text.class, Text.class );*/ //TEMP ADDED FOR ADDED AND UPDATED
            MultipleOutputs.addNamedOutput(job, QaToolRulesConstants.DETAIL, TextOutputFormat.class, Text.class, Text.class);
            FileOutputFormat.setOutputPath(job, new Path(outputPath));
            j = job.waitForCompletion(true) ? 0 : 1;
            LOGGER.info("Program Complted with return " + j);
            //Code Added for Control file Movement -- starts
            String outputBucket = rulesOutputLocation;
            outputBucket = outputBucket.substring(outputBucket.indexOf("//")+2, outputBucket.length());
            outputBucket = outputBucket.substring(0,(outputBucket.indexOf("/")));
            String controlFileNamekey = aWSS3Service.getObjectKey(outputBucket, "delivery/"+ dataMap.get("ControlFileName"),prop);
            if (controlFileNamekey != null) {
                controlFileNamekey = (String) controlFileNamekey.substring(controlFileNamekey.lastIndexOf("/") + 1,controlFileNamekey.length());
                String outputCtrlFilePath = "delivery/"+ dateFormat.format(dateobj) +"/" + controlFileNamekey;
                LOGGER.info("controlFileNamekey "+controlFileNamekey+"   outputCtrlFilePath "+outputCtrlFilePath);
                aWSS3Service.moveObjects(outputBucket, "delivery/"+controlFileNamekey, outputBucket, outputCtrlFilePath,prop);
            }
            //Code Added for Control file Movement -- Ends
            if (j == 0) {
                // Get counters
                LOGGER.info("Transfer");
                final Counters counters = job.getCounters();
                long duplicates = counters.findCounter(MATCH_COUNTER.DUPLICATES).getValue();
                LOGGER.info("duplicates->"+duplicates);
                long groupingThreshold = counters.findCounter(MATCH_COUNTER.GROUPING_ERR_THRESHOLD).getValue();
                LOGGER.info("groupingThreshold->"+groupingThreshold);
                if(groupingThreshold==1 || duplicates==1){
                    if(duplicates==1){
                        writeOutputFile(folderName,dateobj,"DuplicateRecords",prop,cacheBucket);
                    }else{
                        writeOutputFile(folderName,dateobj,"GroupingThreshold",prop,cacheBucket);
                    }
                }else{
                long successCount = counters.findCounter(MATCH_COUNTER.SUCCESS_COUNT).getValue();
                if (controlMap.get("ColumnHeaderPresentIndicator") != null
                        && controlMap.get("ColumnHeaderPresentIndicator").equals("Y")) {
                     successCount = successCount-1;
                }
                LOGGER.info("successCount "+successCount);
                LOGGER.info("TOLERANCEVALUE " + counters.findCounter(MATCH_COUNTER.TOLERANCEVALUE).getValue());
                LOGGER.info("RULES_ERRORTHRESHOLD " + counters.findCounter(MATCH_COUNTER.RULES_ERRORTHRESHOLD).getValue());
                long errorThreshold = counters.findCounter(MATCH_COUNTER.RULES_ERRORTHRESHOLD).getValue();
                LOGGER.info("COMPARISION_ERR_THRESHOLD " + counters.findCounter(MATCH_COUNTER.COMPARISION_ERR_THRESHOLD).getValue());

                writeOutputFile(folderName,dateobj, outputPath + "," + successCount + "," + counters.findCounter(MATCH_COUNTER.TOLERANCEVALUE).getValue() + "," + errorThreshold + ","
                        +counters.findCounter(MATCH_COUNTER.COMPARISION_ERR_THRESHOLD).getValue()+","+ctrlCompResult,prop,cacheBucket);
                String auditBucketName = "";
                auditBucketName = rulesOutputLocation;
                auditBucketName = auditBucketName.substring(auditBucketName.indexOf("//") + 2, auditBucketName.length() - 1);
                auditBucketName = auditBucketName.substring(0, (auditBucketName.indexOf("/")));
                String auditFileMovementPath = "delivery/" + dateFormat.format(dateobj);
                auditFile = auditFile.replace(".xlsx","");
                String inputFileName = (String) dataMap.get("InputFileName");
                inputFileName = inputFileName.substring(0,inputFileName.lastIndexOf(".")).concat(".xlsx");
                try {
                    LOGGER.info("Audit Bucket Name : " + auditBucketName);
                    LOGGER.info("Move parameter >>> outputbucketname  :  auditFileLocation : auditBucketName : auditFileMovementPath   auditFile ");
                    LOGGER.info("Move parameter " + outputbucketname + ", " + auditFileLocation + " , " + auditBucketName + " , " + auditFileMovementPath + "/" + auditFile + "_" + inputFileName);
                    aWSS3Service.moveObjects(outputbucketname, auditFileLocation, auditBucketName, auditFileMovementPath +"/"+ auditFile +"_"+ inputFileName, prop);
                } catch (Exception e) {
                    LOGGER.error("Exception while moving audit file ",e);
                }
            }
            }else{
                writeOutputFile(folderName,dateobj,"DuplicateRecords",prop,cacheBucket);
            }
        } catch (Exception e) {
            LOGGER.error("Error in RulesDriver ", e);
        }
        return j;
    }
}

在test2.dbf文件中,一些符号(ə,ü)保存为“?”符号

0 个答案:

没有答案