为什么会有native2ascii?
java编译器或者其他文件java工具,只认识unicode编码的文件。这一点跟程序只能用英语、数字等编写的一样,否则编译不认识。我们知道,在现实世界中,存在着各种不同字符集编码方案,比如,gbk(中国大陆),big-5(台湾、香港、澳门),koi(俄罗斯),但是jvm只认识unicode字符(/udddd字样),所以,就存在native2ascii这么个工具了。
再反向思考一下,既然有 非Unicode—->Unicode,就有从 Unicode—–>非Unicode,这个也是native2ascii工具的作用。
作用
我们理解了native2ascii存在的原因,也就知道了它的作用。它将非拉丁字符和非Unicode编码的文件,转码为Unicode编码(拉丁语序的字符)。当然,也包括从unicode转为非unicode。其实native2ascii,这个名字已经很好的概括它的作用了,native 2 ascii, 本地编码 到 ascii编码。
ascii编码,美国标准码交换信息,只包含数字、字母、英语表单符号。
注意,拉丁字符可以简单理解为,数字、字母、英语标点符号。
用法
非Unicode转Unicode: native2ascii -encoding sourfile desitationfile
-encoding可以省略,默认是系统的编码。
sourfile可以省略,默认取自标准输入
desitationfile可以省略,默认取自标准输出,也就是控制台。
注意,此处的-encoding是指明源文件的编码,不是目的文件的编码,目的文件编码永远都是unicode(utf16),网上很多教程都说错了!
我们这里举个例子,test.txt是utf16编码,也就是“记事本”中的Unicode编码,里边只有一个汉字“哈”
生成的test_unicode内容,跟控制台中的是一样的。我们发现native字符转为ascii字符了
Unicode转非Unicode,native2ascii -reverse -encoding sourefile destfile
注意,此处的-encoding是目标文件的编码。源文件肯定是unicode编码的,所以不用指定。
我们观察生成的test_gbk.txt, test_utf8.txt内容,发现 ascii字符又转为native字符了
关于native2ascii -encoding sourefile destfile,中-encoding是指明源文件编码的,论证。
我分别转码utf8、gbk、utf16的test.txt文件,test.txt中,只有一个汉字“哈”,然后,将它转为ascii字符,转码正常。
小提示,我使用notepad++,菜单栏—->格式—–>转为xx编码格式,可以很方便的实现,编码之间的切换。如果把-encoding理解为目标文件的编码肯定是错误的!
官方对于native2ascii作用的说明 java doc native2ascii
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20271.html