西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发java → 怎么用native2ascii处理properties文件

怎么用native2ascii处理properties文件

相关软件相关文章发表评论 来源:西西整理时间:2014/2/16 9:56:51字体大小:A-A+

作者:西西点击:82次评论:0次标签: native2ascii

  • 类型:编程辅助大小:20KB语言:中文 评分:10.0
  • 标签:
立即下载

Liferay的资源文件做的还是不错的,基本上界面里的所有消息都放到了资源文件中。具体中文的就是:portal-impl/content下面的Language_zh_CN.properties和Language_zh_CN.properties.native。前一个是unicode字符串,后一个是中文。先将哪个native文件内容翻译过来,再把汉字转化为unicode替换前一个文件就OK了。

可native文件中居然有3000多条,如果全手工通过native2asccii来转换的话,简直是恶梦。因为我是懒人嘛,当然要用懒办法。写了个Java程序调用native2ascii搞定。

native2ascii这个工具主要用来把本地编码(比如gbk)的文件转换成标准的Properties属性文件。
属性文件中,除字母数字外的字符要用\转义,具体的标准参考java文档Properties类的说明。

那这个转换的原理是什么呢?自己如何实现呢?

只能概括下原理。
替换掉本地编码的文本文件中所有的非ascii字符:
比如汉字,先从本地编码GBK转换成对应的unicode字符,
再把这个字符的字符码,以\u21342的形式写回。
char a='你';
 System.out.println(a+" -> \\u"+(int)a);
===========
你 -> \u20320

(int)a 出来的结果不太对嘛!
你应该对应\u4f60

只是我忽略了进制,要求是16进制,我给的是10进制。

"原理"是对的
你的基础差到连一点变通都没法吗?
char a='你';
System.out.println(a+" -> \\u"+Integer.toHexString((int)a));
===========
你 -> \u4f60

首先要安装JDK(不是jre),安装好后将jdk的bin目录添加到系统变量path中,然后就可以使用native2ascii命令在控制台(cmd)中进行转码了
native2ascii a.properties b.properties
当前目录下要有a.properties这个文件,如果没有就要写全路径

如果你用eclipse做开发工具,还是下载一个propedit的插件吧

直接打开运行,输入cmd,就可以转码了,如图

代码如下:

import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.Properties;

/**
 * @author smilingleo E-mail:liuwei.dt@gmail.com
 * @version created time:2007-11-2 上午11:37:55 类说明:
 */

public class Native2Ascii {
    static String java_bin_path = "C:/Java/jdk1.5/bin";

    public Native2Ascii() {

    }

    public Properties getProperties(String filename) throws IOException {
        Properties p = new Properties();
        ClassLoader cl = this.getClass().getClassLoader();
        FileInputStream input;
        input = new FileInputStream(filename);
        p.load(input);
        return p;

    }
    public String getUnicodeString(String value) {

        StringBuffer tempSb = new StringBuffer();
        try {
            Process pro = Runtime.getRuntime().exec(
                    java_bin_path + "/native2ascii.exe ");
            OutputStream out = pro.getOutputStream();
            out.write(value.getBytes());
            out.flush();
            out.close();
            InputStreamReader child_in = new InputStreamReader(pro.getInputStream());
            
            int c;
            while ((c = child_in.read()) != -1) {
                tempSb.append((char) c);
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        return tempSb.toString();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        String sourceFile = "Language_zh_CN.properties";
        String targetFile = "target.properties";
        if (args.length != 2) {
            System.out.println("Usage: java Native2Ascii <source properties filename> <target filename>" + 
                    " Author:Smilingleo" + 
                    " Blog:blog.csdn.net/smilingleo");
//            System.exit(0);
        }else{
            sourceFile = args[0];
            targetFile = args[1];
        }
        Native2Ascii parser = new Native2Ascii();
        StringBuffer sb = new StringBuffer();
        try {
            //Convert the source file into unicode first.
            Properties p = parser.getProperties(sourceFile);
            Iterator iterator = p.keySet().iterator();
            while (iterator.hasNext()){
                Object key = iterator.next();
                String value = p.get(key).toString();
                value= new String(value.getBytes("ISO-8859-1"),"UTF-8");
                value = parser.getUnicodeString(value);
//                System.out.println(key + ":" + value);
                p.setProperty(key.toString(), value);
                sb.append(key.toString() + "=" + value);
            }
            //write the target file.
            FileWriter out = new FileWriter(targetFile);
            out.write(sb.toString());
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

 ////////////////////////

后来发现其实上面的做法是脱了裤子放屁,native2ascii本身就能完美的完成这个工作。其详细用法如下:

native2ascii [options] [inputfile [outputfile]

在options中指定-encoding UTF8就OK了。

呵呵,不过上面程序也不能说完全没有用,权当作为一个用java调用操作系统进程的一个练习吧。

    转码工具
    (27)转码工具
    转码工具是专门针对把自已不需要的文件格式转换自已需要的转码大师工具软件,比如移动设备中只支持某些格式,那就需要使用相关转码工具来转换文件来达到目的了,我们可以转换视频,图片,音频,文档都是可以转换的,视频转换工具,转码工具可以转换所有流行的视频格式,还能从视频中获取音频,图片是相互之间的转换处理,使用这些软件可以很好的帮到我们。...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)