豪仕知识网--知识就是力量!

微信
手机版
生活常识

怎么用native2ascii处理properties文件/nativelocal

作者 :慕容渊博 2024-01-08 20:27:28 围观 : 评论

怎么用native2ascii处理properties文件/nativelocal

豪士君测试所用平台

现在还有好多人不知道怎么用native2ascii处理properties文件,接下来我们小编就来分享一下。

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

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

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HTTP://WWW.hAoz.net███████████████████████████东方金报网

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

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

◐◐◐◐●☛█▼▲豪仕知识网HT●☛█▼▲◐◐◐◐●☛█▼▲

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

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

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

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲HtTp://wWW.haoz.net豪仕知识网●●●●●●●●●●●●●●●●●●●●●●●●●●

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

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

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

◐◐◐◐●☛█▼▲豪仕知识网███████http://www.haOZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

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

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

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

代码如下:

importjava.io.FileInputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.UnsupportedEncodingException;importjava.util.Iterator;importjava.util.Properties;/***@authorsmilingleoE-mail:liuwei.dt@gmail.com*@versioncreatedtime:2007-11-2上午11:37:55类说明:*/publicclassNative2Ascii{staticStringjava_bin_path="C:/Java/jdk1.5/bin";publicNative2Ascii(){}publicPropertiesgetProperties(Stringfilename)throwsIOException{Propertiesp=newProperties();ClassLoadercl=this.getClass().getClassLoader();FileInputStreaminput;input=newFileInputStream(filename);p.load(input);returnp;}publicStringgetUnicodeString(Stringvalue){StringBuffertempSb=newStringBuffer();try{Processpro=Runtime.getRuntime().exec(java_bin_path+"/native2ascii.exe");OutputStreamout=pro.getOutputStream();out.write(value.getBytes());out.flush();out.close();InputStreamReaderchild_in=newInputStreamReader(pro.getInputStream());intc;while((c=child_in.read())!=-1){tempSb.append((char)c);}}catch(UnsupportedEncodingExceptione){e.printStackTrace();}catch(IOExceptionex){ex.printStackTrace();}returntempSb.toString();}/***@paramargs*/publicstaticvoidmain(String[]args){StringsourceFile="Language_zh_CN.properties";StringtargetFile="target.properties";if(args.length!=2){System.out.println("Usage:javaNative2Ascii"+"Author:Smilingleo"+"Blog:blog.csdn.net/smilingleo");//System.exit(0);}else{sourceFile=args[0];targetFile=args[1];}Native2Asciiparser=newNative2Ascii();StringBuffersb=newStringBuffer();try{//Convertthesourcefileintounicodefirst.Propertiesp=parser.getProperties(sourceFile);Iteratoriterator=p.keySet().iterator();while(iterator.hasNext()){Objectkey=iterator.next();Stringvalue=p.get(key).toString();value=newString(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);}//writethetargetfile.FileWriterout=newFileWriter(targetFile);out.write(sb.toString());out.flush();out.close();}catch(Exceptione){e.printStackTrace();}}}

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

◐◐◐◐●☛█▼▲豪仕知识网███████豪仕知识http://www.Haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

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

native2ascii[options][inputfile[outputfile]

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

◐◐◐◐●☛█▼▲豪仕知识网███████http://www.haOZ.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

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

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

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

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

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

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

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

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

HTTP://WWW.haoz.net豪仕知识网采集不好玩哦◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐撒旦法师打发斯蒂芬

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

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

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

豪仕知识网http://www.haoz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

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

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

◐◐◐◐●☛█▼▲豪仕知识网http://www.haOz.net▼▲▼▲▼▲▼▲▼●●●●●●●▼▲▼▲▼▲

代码如下:

importjava.io.FileInputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.UnsupportedEncodingException;importjava.util.Iterator;importjava.util.Properties;/***@authorsmilingleoE-mail:liuwei.dt@gmail.com*@versioncreatedtime:2007-11-2上午11:37:55类说明:*/publicclassNative2Ascii{staticStringjava_bin_path="C:/Java/jdk1.5/bin";publicNative2Ascii(){}publicPropertiesgetProperties(Stringfilename)throwsIOException{Propertiesp=newProperties();ClassLoadercl=this.getClass().getClassLoader();FileInputStreaminput;input=newFileInputStream(filename);p.load(input);returnp;}publicStringgetUnicodeString(Stringvalue){StringBuffertempSb=newStringBuffer();try{Processpro=Runtime.getRuntime().exec(java_bin_path+"/native2ascii.exe");OutputStreamout=pro.getOutputStream();out.write(value.getBytes());out.flush();out.close();InputStreamReaderchild_in=newInputStreamReader(pro.getInputStream());intc;while((c=child_in.read())!=-1){tempSb.append((char)c);}}catch(UnsupportedEncodingExceptione){e.printStackTrace();}catch(IOExceptionex){ex.printStackTrace();}returntempSb.toString();}/***@paramargs*/publicstaticvoidmain(String[]args){StringsourceFile="Language_zh_CN.properties";StringtargetFile="target.properties";if(args.length!=2){System.out.println("Usage:javaNative2Ascii"+"Author:Smilingleo"+"Blog:blog.csdn.net/smilingleo");//System.exit(0);}else{sourceFile=args[0];targetFile=args[1];}Native2Asciiparser=newNative2Ascii();StringBuffersb=newStringBuffer();try{//Convertthesourcefileintounicodefirst.Propertiesp=parser.getProperties(sourceFile);Iteratoriterator=p.keySet().iterator();while(iterator.hasNext()){Objectkey=iterator.next();Stringvalue=p.get(key).toString();value=newString(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);}//writethetargetfile.FileWriterout=newFileWriter(targetFile);out.write(sb.toString());out.flush();out.close();}catch(Exceptione){e.printStackTrace();}}}

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

●☛█▼▲豪仕知识网◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲

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

native2ascii[options][inputfile[outputfile]

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

HTTP://WWW.haoz.net◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐◐豪仕知识网

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

关于怎么用native2ascii处理properties文件的内容到此结束,希望对大家有所帮助。豪仕知识网往后会继续推荐怎么用native2ascii处理properties文件相关内容。

◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲◐◐◐◐●☛█▼▲豪仕知识网HtTp://▲▼▲▼▲

相关文章