<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yegucheng

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      9 Posts :: 0 Stories :: 8 Comments :: 0 Trackbacks

    筆者的場景是這樣的,筆者使用code smith作為代碼生成工具,并在Eclipse中做插件開發(fā),code smith天生
    對GB的支持比較弱,只能生成UTF-8編碼,這在Eclipse開發(fā)的過程中不會存在問題,但是在使用Eclipse的導(dǎo)出
    功能時,Eclipse底層使用ANT的執(zhí)行方式,ANT的默認(rèn)字符集默認(rèn)使用當(dāng)前系統(tǒng)的字符集,這時在編譯導(dǎo)出的時候,
    會出現(xiàn)字符無法識別的問題,導(dǎo)致導(dǎo)出或者打包失敗。
     一種方式可以改變Eclipse工程的默認(rèn)字符集,以及自動生成的ant配置文件中字符集的配置,這對于單個工程是有
    效的,但處理工程間依賴時,被依賴的工程同樣會出現(xiàn)字符集問題,即使被依賴工程設(shè)定ant的字符集。
     另一種方式,是手工轉(zhuǎn)換,講UTF-8的字符集轉(zhuǎn)換為GBK的,微軟的網(wǎng)站提供了一個批量轉(zhuǎn)換工具,但是在轉(zhuǎn)換之后,
    文檔的最前面還會有可能存在多于字符,并導(dǎo)致ant打包失敗
     最后,沒辦法自己寫了一個字符集轉(zhuǎn)換工具,因為是自己用,所以夠用就行,下面是轉(zhuǎn)換部分的代碼,實現(xiàn)UTF8到
    GBK的轉(zhuǎn)換,其他轉(zhuǎn)換可以對代碼稍作修改。

     
    import org.apache.commons.lang.ArrayUtils;

    public class EncodeRepairTool {
     public static final byte[] bPre = "EFBBBF".getBytes();
     private int i = 0;

     /**
      * @param args
      */
     public static void main(String[] args) {  
      String path = "D:\\eclipse-dev-3.3\\workspace";
      File file = new File(path);
      EncodeRepairTool scanner = new EncodeRepairTool();
      scanner.scanFolder(file);

     }

     

     public void scanFolder(File file) {
      if (file.isDirectory()) {
       File[] files = file.listFiles();
       for (int i = 0; i < files.length; i++) {
        scanFolder(files[i]);
       }
      } else if (file.getName().endsWith(".java")) {
       removePreCode(file);
      }
     }

     private void removePreCode(File file) {
      try {
       FileInputStream fis = new FileInputStream(file);
       int size = fis.available();
       if (size < 24) {
        return;
       }
       i ++ ;
       byte[] bs = new byte[size];
       fis.read(bs);
       byte[] tbs = ArrayUtils.subarray(bs, 0, 3);
       byte[] tbs1 = new byte[] { new Integer(0xEF).byteValue(),
         new Integer(0xBB).byteValue(),
         new Integer(0xBF).byteValue() };
       boolean bol = false;
       if (tbs[0] == tbs1[0] && tbs[1] == tbs1[1] && tbs[2] == tbs1[2]) {
        bol = true;
       }
       fis.close();
       if (!bol) {
        System.out.println("  " + i + " : " + file.getName());
        tbs = bs;
       }
       else {
        System.out.println("**" + i + " : " + file.getName());
        tbs = ArrayUtils.subarray(bs, 3, size);
        
       }   
       InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(tbs), "UTF-8");
       BufferedReader br = new BufferedReader(reader);
       StringBuffer buffer = new StringBuffer();
       String s = br.readLine();
       while (s != null) {
        buffer.append(s);
        buffer.append("\n");
        s =  br.readLine();
       }
       reader.close();
       byte[] nbs = buffer.toString().getBytes("GBK");   
       FileOutputStream fos = new FileOutputStream(file);
       fos.write(nbs);
       fos.flush();
       fos.close();
       
      } catch (FileNotFoundException e) {
       // TODO 自動生成 catch 塊
       e.printStackTrace();
      } catch (IOException e) {
       // TODO 自動生成 catch 塊
       e.printStackTrace();
      }

     }

    }

    posted on 2007-10-26 10:01 yegucheng 閱讀(2238) 評論(5)  編輯  收藏 所屬分類: Eclipse插件開發(fā)java技術(shù)

    Feedback

    # re: 使用Java API操作文件的字符集 2007-10-26 13:18 bitiwyh
    好像使用ant copy可以指定讀入/寫出出的encoding的.

    encoding/outputencoding.
    不知道行不行.  回復(fù)  更多評論
      

    # re: 使用Java API操作文件的字符集 2007-10-26 13:31 yegucheng
    可以的,ant的javac也可以指定字符集
    但是有三個問題:
    1. 通過Eclipse的自動生成工具不會生成encoding以及outEncoding的參數(shù)(沒有找到修改Eclipse相關(guān)模板的地方)
    2. 當(dāng)字符集不正確時,編譯的時候會無法解析java 源文件,必須指定javac的運(yùn)行參數(shù)(印象中好像是在javac)
    3. Eclipse的插件工程存在依賴關(guān)系時,當(dāng)編譯一個插件,依賴到工作區(qū)的其他插件時,會同時進(jìn)行編譯,這時候ant中即使制定了參數(shù)也不會生效,會拋出字符集錯誤

      回復(fù)  更多評論
      

    # re: 使用Java API操作文件的字符集 2007-10-26 13:33 yegucheng
    當(dāng)然如果,是在單個的java工程下,使用ant會簡單很多  回復(fù)  更多評論
      

    # re: 使用Java API操作文件的字符集 2007-10-28 16:06 bitiwyh
    哦,我的意思不是說使用ant javac.
    javac 是可以指定編碼的.

    -
    我是說,用ant copy
    將code smith生成的代碼,使用ant copy --> Eclipse工程目錄.

      回復(fù)  更多評論
      

    # re: 使用Java API操作文件的字符集 2007-10-29 09:16 yegucheng
    呵呵,確實可以,我開始領(lǐng)會錯你的意思了。
    我首先是從微軟的網(wǎng)站下載的轉(zhuǎn)換工具,結(jié)果發(fā)現(xiàn)編譯還是有問題(文檔前端的首字符還是沒有去掉),時間緊,就自己寫了一個  回復(fù)  更多評論
      

    主站蜘蛛池模板: 亚洲国产精品不卡在线电影| 亚洲人成人77777网站| 亚洲一区欧洲一区| 精品免费人成视频app| 亚洲大尺码专区影院| 四虎最新永久免费视频| 亚洲成人网在线播放| 69天堂人成无码麻豆免费视频| 久久久久亚洲AV无码观看| 成年人免费的视频| 亚洲一区二区三区高清在线观看| 男男AV纯肉无码免费播放无码| 日韩亚洲人成在线| 日本免费v片一二三区| 风间由美在线亚洲一区| 又粗又硬又大又爽免费视频播放| 特级毛片A级毛片100免费播放| 亚洲男人第一无码aⅴ网站| 伊人免费在线观看| 无码乱人伦一区二区亚洲| 在免费jizzjizz在线播| 亚洲欧美成人av在线观看| 国产乱子影视频上线免费观看| 无人视频在线观看免费播放影院| 国产亚洲精品久久久久秋霞| 日本视频免费高清一本18| 亚洲依依成人精品| 日产国产精品亚洲系列| baoyu122.永久免费视频| 亚洲色图.com| 在线观看91精品国产不卡免费| 成人精品综合免费视频| 亚洲精品国产成人专区| 成人免费视频小说| 一级人做人爰a全过程免费视频| 亚洲日韩区在线电影| 国内自产少妇自拍区免费| 九九热久久免费视频| 亚洲AV无码一区二区三区在线| 国产成人精品高清免费| 国产精品免费高清在线观看|