使用native2ascii进行编码格式转换收藏
2009-01-30 17:20
405 查看
转自:http://www.nashenme.com
1. 将CN.properties国际化资源文件 转换为 简体中文
控制台命令:
native2ascii -reverse -encoding gbk CN.properties CN2.properties
背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码。原因是java默认的编码方式为Unicode,而我们的计算机系统编码常常是GBK等编码。需要将系统的编码转换为java正确识别的编码问题就解决了。
1、native2ascii简介:native2ascii是sun java sdk提供的一个工具。用来将别的文本类文件(比如*.txt,*.ini,*.properties,*.java等等)编码转为Unicode编码。为什么要进行转码,原因在于程序的国际化。Unicode编码的定义:Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。(声明:Unicode编码定义来自互联网)。
2、获取native2ascii:安装了jdk后,假如你是在windows上安装,那么在jdk的安装目录下,会有一个bin目录,其中native2ascii.exe正是。
3、native2ascii的命令行的命名格式:
native2ascii -[options] [inputfile [outputfile]]
说明:
-[options]:表示命令开关,有两个选项可供选择
-reverse:将Unicode编码转为本地或者指定编码,不指定编码情况下,将转为本地编码。
-encoding encoding_name:转换为指定编码,encoding_name为编码名称。
[inputfile [outputfile]]
inputfile:表示输入文件全名。
outputfile:输出文件名。如果缺少此参数,将输出到控制台。
4、最佳实践:首先将JDK的bin目录加入系统变量path。在盘下建立一个test目录,在test目录里建立一个zh.txt文件,文件内容为:“熔岩”,打开“命令行提示符”,并进入C:/test目录下。下面就可以按照说明一步一步来操作,注意观察其中编码的变化。
A:将zh.txt转换为Unicode编码,输出文件到u.txt
native2ascii zh.txt u.txt
打开u.txt,内容为“/u7194/u5ca9”。
B:将zh.txt转换为Unicode编码,输出到控制台
C:/test>native2ascii zh.txt
/u7194/u5ca9
可以看到,控制台输出了“/u7194/u5ca9”。
C:将zh.txt转换为ISO8859-1编码,输出文件到i.txt
native2ascii -encoding ISO8859-1 zh.txt i.txt
打开i.txt文件,内容为“/u00c8/u00db/u00d1/u00d2”。
D:将u.txt转换为本地编码,输出到文件u_nv.txt
native2ascii -reverse u.txt u_nv.txt
打开u_nv.txt文件,内容为“熔岩”。
E:将u.txt转换为本地编码,输出到控制台
C:/test>native2ascii -reverse u.txt
熔岩
可以看到,控制台输出了“熔岩”。
F:将i.txt转换为本地编码,输出到i_nv.txt
native2ascii -reverse i.txt i_nv.txt
打开i_nv.txt文件,内容为“/u00c8/u00db/u00d1/u00d2”。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。。
G:将i.txt转换为GBK编码,输出到i_gbk.txt
native2ascii -reverse -encoding GBK i.txt i_gbk.txt
打开i_gbk.txt文件,内容为“/u00c8/u00db/u00d1/u00d2”。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。
H:将u_nv.txt转码到本地编码GBK,输出到控制台
C:/test>native2ascii -reverse -encoding ISO8859-1 i.txt
熔岩
从这个结果看,目标达到到了,编码i.txt为ISO8859-1,转为本地编码后内容为“熔岩”。从这里应该意识到,native2ascii -reverse命令中-encoding指定的编码为源文件的编码格式。而在native2ascii 命令中-encoding指定的编码为(生成的)目标文件的编码格式。这一点非常的重要!切记!!
继续探索,新建文件12a.txt,内容“12axyz”。看看纯字母数字的编码又如何。
I:将纯字母数字的文本文件12a.txt转换为Unicode编码
native2ascii 12a.txt 12a_nv.txt
打开12a_nv.txt文件,内容为“12axyz”。
继续测试,转为ISO8859-1编码看看
C:/test>native2ascii -encoding ISO8859-1 12a.txt
12axyz
结果还是没有转码。
从结果可以得出结论:对于纯数字和字母的文本类型件,转码前后的内容是一样的。
5、总结:native2ascii是一个非常的好转码工具,并且转码是可逆的!而其真正的含义并非本地编码——>转码为ASCII码,而是一个通用的文本文件编码转换工具。在做编码转换的时候有两类指定编码的情形,分别指输出文件编码和输入文件编码,具体可以看看最佳实践部分。
native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]]
例子
正转:To:Unicode
native2ascii Native2ASCII.properties Native2ASCII_zh_CN.properties
反转:Reverse Unicode To 指定码
native2ascii -reverse Native2ASCII_zh_CN.properties Native2ASCII_temp.properties
8859_1 ISO 8859-1
8859_2 ISO 8859-2
8859_3 ISO 8859-3
8859_4 ISO 8859-4
8859_5 ISO 8859-5
8859_6 ISO 8859-6
8859_7 ISO 8859-7
8859_8 ISO 8859-8
8859_9 ISO 8859-9
Big5 Big5 码,繁体中文
CNS11643 CNS 11643,繁体中文
Cp037 美国、加拿大(两种语言,法语)、荷兰、葡萄牙、巴西、澳大利亚
Cp1006 IBM AIX 巴基斯坦(乌尔都语)
Cp1025 IBM 多语种西里尔语:保加利亚、波斯尼亚
黑塞哥维那、马其顿 (FYR)
Cp1026 IBM Latin-5,土耳其
Cp1046 IBM Open Edition US EBCDIC
Cp1097 IBM 伊朗(波斯语)/波斯
Cp1098 IBM 伊朗(波斯语)/波斯 (PC)
Cp1112 IBM 拉脱维亚,立陶宛
Cp1122 IBM 爱沙尼亚
Cp1123 IBM 乌克兰
Cp1124 IBM AIX 乌克兰
Cp1125 IBM 乌克兰 (PC)
Cp1250 Windows 东欧
Cp1251 Windows 斯拉夫语
Cp1252 Windows Latin-1
Cp1253 Windows 希腊
Cp1254 Windows 土耳其
Cp1255 Windows 希伯莱
Cp1256 Windows 阿拉伯
Cp1257 Windows 波罗的语
Cp1258 Windows 越南语
Cp1381 IBM OS/2, DOS 中华人民共和国 (PRC)
Cp1383 IBM AIX 中华人民共和国 (PRC)
Cp273 IBM 奥地利、德国
Cp277 IBM 丹麦、挪威
Cp278 IBM 芬兰、瑞典
Cp280 IBM 意大利
Cp284 IBM 加泰罗尼亚语/西班牙、拉丁美洲西班牙语
Cp285 IBM 英国、爱尔兰
Cp297 IBM 法国
Cp33722 IBM-eucJP - 日语 (5050 的超集)
Cp420 IBM 阿拉伯
Cp424 IBM 希伯莱
Cp437 MS-DOS 美国、澳大利亚、新西兰、南非
Cp500 EBCDIC 500V1
Cp737 PC 希腊
Cp775 PC 波罗的语
Cp838 IBM 泰国扩展 SBCS
Cp850 MS-DOS Latin-1
Cp852 MS-DOS Latin-2
Cp855 IBM 斯拉夫语
Cp857 IBM 土耳其语
Cp860 MS-DOS 葡萄牙语
Cp861 MS-DOS 冰岛语
Cp862 PC 希伯莱
Cp863 MS-DOS 加拿大法语
Cp864 PC 阿拉伯语
Cp865 MS-DOS 日尔曼语
Cp866 MS-DOS 俄语
Cp868 MS-DOS 巴基斯坦语
Cp869 IBM 现代希腊语
Cp870 IBM 多语种 Latin-2
Cp871 IBM 冰岛语
Cp874 IBM 泰国语
Cp875 IBM 希腊语
Cp918 IBM 巴基斯坦(乌尔都语)
Cp921 IBM 拉脱维亚、立陶宛(AIX, DOS)
Cp922 IBM 爱沙尼亚 (AIX, DOS)
Cp930 与 4370 UDC 混合的日语,5026 的超集
Cp933 与 1880 UDC 混合的韩文,5029 的超集
Cp935 与 1880 UDC 混合的简体中文主机,5031 的超集
Cp937 与 6204 UDC 混合的繁体中文,5033 的超集
Cp939 与 4370 UDC 混合的日语拉丁字母,5035 的超集
Cp942 日语 (OS/2),932 的超集
Cp948 OS/2 中文(台湾),938 超集
Cp949 PC 韩文
Cp950 PC 中文(香港、台湾)
Cp964 AIX 中文(台湾)
Cp970 AIX 韩文
EUCJIS JIS, EUC 编码、日语
GB2312 GB2312, EUC 编码、简体中文
GBK GBK, 简体中文
ISO2022CN ISO 2022 CN, 中文
ISO2022CN_CNS ISO-2022-CN 形式的 CNS 11643,繁体中文
ISO2022CN_GB ISO-2022-CN 形式的 GB 2312,简体中文
ISO2022KR ISO 2022 KR, 韩文
JIS JIS, 日语
JIS0208 JIS 0208, 日语
KOI8_R KOI8-R, 俄语
KSC5601 KS C 5601, 韩文
MS874 Windows 泰国语
MacArabic Macintosh 阿拉伯语
MacCentralEurope Macintosh Latin-2
MacCroatian Macintosh 克罗地亚语
MacCyrillic Macintosh 斯拉夫语
MacDingbat Macintosh Dingbat
MacGreek Macintosh 希腊语
MacHebrew Macintosh 希伯莱语
MacIceland Macintosh 冰岛语
MacRoman Macintosh 罗马语
MacRomania Macintosh 罗马尼亚语
MacSymbol Macintosh 符号
MacThai Macintosh 泰国语
MacTurkish Macintosh 土耳其语
MacUkraine Macintosh 乌克兰语
SJIS Shift-JIS, 日语
UTF8 UTF-8
1. 将CN.properties国际化资源文件 转换为 简体中文
控制台命令:
native2ascii -reverse -encoding gbk CN.properties CN2.properties
背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码。原因是java默认的编码方式为Unicode,而我们的计算机系统编码常常是GBK等编码。需要将系统的编码转换为java正确识别的编码问题就解决了。
1、native2ascii简介:native2ascii是sun java sdk提供的一个工具。用来将别的文本类文件(比如*.txt,*.ini,*.properties,*.java等等)编码转为Unicode编码。为什么要进行转码,原因在于程序的国际化。Unicode编码的定义:Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。(声明:Unicode编码定义来自互联网)。
2、获取native2ascii:安装了jdk后,假如你是在windows上安装,那么在jdk的安装目录下,会有一个bin目录,其中native2ascii.exe正是。
3、native2ascii的命令行的命名格式:
native2ascii -[options] [inputfile [outputfile]]
说明:
-[options]:表示命令开关,有两个选项可供选择
-reverse:将Unicode编码转为本地或者指定编码,不指定编码情况下,将转为本地编码。
-encoding encoding_name:转换为指定编码,encoding_name为编码名称。
[inputfile [outputfile]]
inputfile:表示输入文件全名。
outputfile:输出文件名。如果缺少此参数,将输出到控制台。
4、最佳实践:首先将JDK的bin目录加入系统变量path。在盘下建立一个test目录,在test目录里建立一个zh.txt文件,文件内容为:“熔岩”,打开“命令行提示符”,并进入C:/test目录下。下面就可以按照说明一步一步来操作,注意观察其中编码的变化。
A:将zh.txt转换为Unicode编码,输出文件到u.txt
native2ascii zh.txt u.txt
打开u.txt,内容为“/u7194/u5ca9”。
B:将zh.txt转换为Unicode编码,输出到控制台
C:/test>native2ascii zh.txt
/u7194/u5ca9
可以看到,控制台输出了“/u7194/u5ca9”。
C:将zh.txt转换为ISO8859-1编码,输出文件到i.txt
native2ascii -encoding ISO8859-1 zh.txt i.txt
打开i.txt文件,内容为“/u00c8/u00db/u00d1/u00d2”。
D:将u.txt转换为本地编码,输出到文件u_nv.txt
native2ascii -reverse u.txt u_nv.txt
打开u_nv.txt文件,内容为“熔岩”。
E:将u.txt转换为本地编码,输出到控制台
C:/test>native2ascii -reverse u.txt
熔岩
可以看到,控制台输出了“熔岩”。
F:将i.txt转换为本地编码,输出到i_nv.txt
native2ascii -reverse i.txt i_nv.txt
打开i_nv.txt文件,内容为“/u00c8/u00db/u00d1/u00d2”。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。。
G:将i.txt转换为GBK编码,输出到i_gbk.txt
native2ascii -reverse -encoding GBK i.txt i_gbk.txt
打开i_gbk.txt文件,内容为“/u00c8/u00db/u00d1/u00d2”。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。
H:将u_nv.txt转码到本地编码GBK,输出到控制台
C:/test>native2ascii -reverse -encoding ISO8859-1 i.txt
熔岩
从这个结果看,目标达到到了,编码i.txt为ISO8859-1,转为本地编码后内容为“熔岩”。从这里应该意识到,native2ascii -reverse命令中-encoding指定的编码为源文件的编码格式。而在native2ascii 命令中-encoding指定的编码为(生成的)目标文件的编码格式。这一点非常的重要!切记!!
继续探索,新建文件12a.txt,内容“12axyz”。看看纯字母数字的编码又如何。
I:将纯字母数字的文本文件12a.txt转换为Unicode编码
native2ascii 12a.txt 12a_nv.txt
打开12a_nv.txt文件,内容为“12axyz”。
继续测试,转为ISO8859-1编码看看
C:/test>native2ascii -encoding ISO8859-1 12a.txt
12axyz
结果还是没有转码。
从结果可以得出结论:对于纯数字和字母的文本类型件,转码前后的内容是一样的。
5、总结:native2ascii是一个非常的好转码工具,并且转码是可逆的!而其真正的含义并非本地编码——>转码为ASCII码,而是一个通用的文本文件编码转换工具。在做编码转换的时候有两类指定编码的情形,分别指输出文件编码和输入文件编码,具体可以看看最佳实践部分。
native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]]
例子
正转:To:Unicode
native2ascii Native2ASCII.properties Native2ASCII_zh_CN.properties
反转:Reverse Unicode To 指定码
native2ascii -reverse Native2ASCII_zh_CN.properties Native2ASCII_temp.properties
8859_1 ISO 8859-1
8859_2 ISO 8859-2
8859_3 ISO 8859-3
8859_4 ISO 8859-4
8859_5 ISO 8859-5
8859_6 ISO 8859-6
8859_7 ISO 8859-7
8859_8 ISO 8859-8
8859_9 ISO 8859-9
Big5 Big5 码,繁体中文
CNS11643 CNS 11643,繁体中文
Cp037 美国、加拿大(两种语言,法语)、荷兰、葡萄牙、巴西、澳大利亚
Cp1006 IBM AIX 巴基斯坦(乌尔都语)
Cp1025 IBM 多语种西里尔语:保加利亚、波斯尼亚
黑塞哥维那、马其顿 (FYR)
Cp1026 IBM Latin-5,土耳其
Cp1046 IBM Open Edition US EBCDIC
Cp1097 IBM 伊朗(波斯语)/波斯
Cp1098 IBM 伊朗(波斯语)/波斯 (PC)
Cp1112 IBM 拉脱维亚,立陶宛
Cp1122 IBM 爱沙尼亚
Cp1123 IBM 乌克兰
Cp1124 IBM AIX 乌克兰
Cp1125 IBM 乌克兰 (PC)
Cp1250 Windows 东欧
Cp1251 Windows 斯拉夫语
Cp1252 Windows Latin-1
Cp1253 Windows 希腊
Cp1254 Windows 土耳其
Cp1255 Windows 希伯莱
Cp1256 Windows 阿拉伯
Cp1257 Windows 波罗的语
Cp1258 Windows 越南语
Cp1381 IBM OS/2, DOS 中华人民共和国 (PRC)
Cp1383 IBM AIX 中华人民共和国 (PRC)
Cp273 IBM 奥地利、德国
Cp277 IBM 丹麦、挪威
Cp278 IBM 芬兰、瑞典
Cp280 IBM 意大利
Cp284 IBM 加泰罗尼亚语/西班牙、拉丁美洲西班牙语
Cp285 IBM 英国、爱尔兰
Cp297 IBM 法国
Cp33722 IBM-eucJP - 日语 (5050 的超集)
Cp420 IBM 阿拉伯
Cp424 IBM 希伯莱
Cp437 MS-DOS 美国、澳大利亚、新西兰、南非
Cp500 EBCDIC 500V1
Cp737 PC 希腊
Cp775 PC 波罗的语
Cp838 IBM 泰国扩展 SBCS
Cp850 MS-DOS Latin-1
Cp852 MS-DOS Latin-2
Cp855 IBM 斯拉夫语
Cp857 IBM 土耳其语
Cp860 MS-DOS 葡萄牙语
Cp861 MS-DOS 冰岛语
Cp862 PC 希伯莱
Cp863 MS-DOS 加拿大法语
Cp864 PC 阿拉伯语
Cp865 MS-DOS 日尔曼语
Cp866 MS-DOS 俄语
Cp868 MS-DOS 巴基斯坦语
Cp869 IBM 现代希腊语
Cp870 IBM 多语种 Latin-2
Cp871 IBM 冰岛语
Cp874 IBM 泰国语
Cp875 IBM 希腊语
Cp918 IBM 巴基斯坦(乌尔都语)
Cp921 IBM 拉脱维亚、立陶宛(AIX, DOS)
Cp922 IBM 爱沙尼亚 (AIX, DOS)
Cp930 与 4370 UDC 混合的日语,5026 的超集
Cp933 与 1880 UDC 混合的韩文,5029 的超集
Cp935 与 1880 UDC 混合的简体中文主机,5031 的超集
Cp937 与 6204 UDC 混合的繁体中文,5033 的超集
Cp939 与 4370 UDC 混合的日语拉丁字母,5035 的超集
Cp942 日语 (OS/2),932 的超集
Cp948 OS/2 中文(台湾),938 超集
Cp949 PC 韩文
Cp950 PC 中文(香港、台湾)
Cp964 AIX 中文(台湾)
Cp970 AIX 韩文
EUCJIS JIS, EUC 编码、日语
GB2312 GB2312, EUC 编码、简体中文
GBK GBK, 简体中文
ISO2022CN ISO 2022 CN, 中文
ISO2022CN_CNS ISO-2022-CN 形式的 CNS 11643,繁体中文
ISO2022CN_GB ISO-2022-CN 形式的 GB 2312,简体中文
ISO2022KR ISO 2022 KR, 韩文
JIS JIS, 日语
JIS0208 JIS 0208, 日语
KOI8_R KOI8-R, 俄语
KSC5601 KS C 5601, 韩文
MS874 Windows 泰国语
MacArabic Macintosh 阿拉伯语
MacCentralEurope Macintosh Latin-2
MacCroatian Macintosh 克罗地亚语
MacCyrillic Macintosh 斯拉夫语
MacDingbat Macintosh Dingbat
MacGreek Macintosh 希腊语
MacHebrew Macintosh 希伯莱语
MacIceland Macintosh 冰岛语
MacRoman Macintosh 罗马语
MacRomania Macintosh 罗马尼亚语
MacSymbol Macintosh 符号
MacThai Macintosh 泰国语
MacTurkish Macintosh 土耳其语
MacUkraine Macintosh 乌克兰语
SJIS Shift-JIS, 日语
UTF8 UTF-8
相关文章推荐
- 使用JDK自带的native2ascii工具对properties文件进行编码转换
- 使用 sprintf swprintf 函数进行 unicode 与 ANSI 编码的转换
- java中使用JDK的native2ascii进行字符转换 国际化中的汉字转换
- 利用VS.net编程,进行字符串编码格式的各种转换代码
- 如何使用java代码进行视频格式的转换(FLV)
- 如何使用java代码进行视频格式的转换(FLV)
- 使用8位字节的编码格式将字节流安全的转换成String
- 编码格式之间进行文本内码转换的库
- 多种国际编码格式之间进行文本内码的转换
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 编码格式的转换与使用
- 使用jackson来进行数组格式的json字符串转换成List。
- 将tf训练的权重保存为CKPT,PB ,CKPT 转换成 PB格式。并将权重固化到图里面,并使用该模型进行预测
- 使用 Java 对 Linux 下文件编码格式进行批量转换
- native2ascii使用到的一些编码格式
- 使用python转换编码格式
- JDK提供的编码转换工具native2ascii使用
- 使用字符串流对象进行格式转换
- 使用C#进行图片转换格式,缩放,自动旋转,保留exif(转载)
- 使用java的native2ascii工具命令来转换编码gbk,gb2312,utf-8