properties 文件的中文轉ASCII

 在軟件開發過程中,經常要涉及到多語言支持問題,常用的解決方案是將各個語言文字放到properties文件中,但中文是需要轉爲ASCII的 。那麼如何將中文進行轉換呢,下面就爲你列舉幾種比較方便的方法 
一.jdk的native2ascii
舉例:
1.轉換一行中文文字
進入jdk的bin目錄,雙擊native2ascii.exe,輸入“你好”,【回車】,屏幕上顯示/u4f60/u597d

2.轉換一個文件
cmd命令行中執行(注意配置好path環境變量) 
d:/>native2acsii aa.properties bb.properties 
如此一來就aa.properties 中的中文字符轉換後保存進bb.properties 文件中。注意如果其中含有英文字符,則原樣輸出。
 
二.ant
    可以一次就轉換n多個文件
  
           
  
三.eclipse插件
如果是MyEclipse,安裝插件方式如下:
安裝步驟:
1、展開Eclipse的Help菜單,將鼠標移到Software Update子項,在出現的子菜單中點擊Find and Install; 
2、在Install/Update對話框中選擇Search for new features to install,點擊Next; 
3、在Install對話框中點擊New Remote Site; 
4、在New Update Site對話框的Name填入任意字符串中文也可以,在URL中填入http://propedit.sourceforge.jp/eclipse/updates/;然後可能需要先點擊finish,不過依然會出現後面的部分(根據版本的不同而定) 
5、在Site to include to search列表中,除上一步加入的site外的其它選項去掉,點擊Finsih; 
6、在彈出的Updates對話框中的Select the features to install列表中將所有結尾爲“3.1.x”的選項去掉(適用於Eclipse 3.2版本的朋友); 
7、點擊Finish關閉對話框; 
8、在下載後,同意安裝,再按提示重啓Eclipse,在工具條看到形似vi的按鈕表示安裝成功,插件可用。此時,Eclpise中所有properties文件的文件名前有綠色的P的圖標作爲標識。
9、properties文件使用PropertiesEditor(右鍵,openwith,一般來說安裝插件後默認就會使用這個編輯器)打開,輸入中文,編輯器會自動將其轉換爲ascii碼
 
如果是Eclipse,展開help,選擇Install new software,add,輸入地址,確定後eclipse會進行自動搜索,不過安裝插件時會出現無法安裝的情況,此時可以下載我提供的安裝包,
下載地址 :http://download.csdn.net/source/1488797
 
可以直接將插件包解壓後的features和plugins兩個文件夾複製到eclipse的home目錄下,重啓eclipse即可。
 
  四、編寫轉換ASCII的java程序,並執行
     
public class Ascii2Native {
  public static void main(String[] args) {

         File f=new 
File("E://workspaces//cas_workspace//CASServer//src//messages_zh_CN.properties");
             if (f.exists() && f.isFile()) {
                 // convert param-file
                 BufferedReader br = null;
                 String line;
                 try {
                     br = new BufferedReader(new InputStreamReader(new FileInputStream(f), "JISAutoDetect"));
                     while ((line = br.readLine()) != null) {
                         System.out.println(ascii2native(line));
                     }
                 } catch (FileNotFoundException e) {
                     System.err.println("file not found - " + f);
                 } catch (IOException e) {
                     System.err.println("read error - " + f);
                 } finally {
                     try {
                         if (br != null)
                             br.close();
                     } catch (Exception e) {
                     }
                 }
             } else {
             // // convert param-data
             // System.out.print(ascii2native(args[i]));
             // if (i + 1 < args.length)
              System.out.print("wen");
             }
     }
     
     public static String ascii2native(String str) {
         String hex = "0123456789ABCDEF";
         StringBuffer buf = new StringBuffer();
         int ptn = 0;
         for (int i = 0; i < str.length(); i++) {
             char c = str.charAt(i);
             if (c == '//' && i + 1 <= str.length() && str.charAt(i + 1) == '//') {
                 buf.append("////");
                 i += 1;
             } else if (c == '//' && i + 6 <= str.length() && str.charAt(i + 1) == 'u') {
                 String sub = str.substring(i + 2, i + 6).toUpperCase();
                 int i0 = hex.indexOf(sub.charAt(0));
                 int i1 = hex.indexOf(sub.charAt(1));
                 int i2 = hex.indexOf(sub.charAt(2));
                 int i3 = hex.indexOf(sub.charAt(3));
                 if (i0 < 0 || i1 < 0 || i2 < 0 || i3 < 0) {
                     buf.append("//u");
                     i += 1;
                 } else {
                     byte[] data = new byte[2];
                     data[0] = i2b(i1 + i0 * 16);
                     data[1] = i2b(i3 + i2 * 16);
                     try {
                         buf.append(new String(data, "UTF-16BE").toString());
                     } catch (Exception ex) {
                         buf.append("//u" + sub);
                     }
                     i += 5;
                 }
             } else {
                 buf.append(c);
             }
         }
         return buf.toString();
     }
       
     private static byte i2b(int i) {
         return (byte) ((i > 127) ? i - 256 : i);
     }
}


ps:最近發現了一個更好用的插件,可以同時編輯一組properties文件,http://www.guh-software.de/jinto_en.html,恩好東西。

搬遷源地址http://blog.sina.com.cn/s/blog_7671643b01015qnm.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章