native2ascii的使用及j2ee字符编码[深刻]

java程序显示中文是大家都遇到过的问题,尤其是JAD文件的中文问题,一般都用native2ascii工具转换,这里收藏了native2ascii工具的详细说明:


native2ascii - Native-to-ASCII Converter
Converts a file with native-encoded characters (characters which are non-Latin 1 and non-Unicode) to one with Unicode-encoded characters. 
SYNOPSIS
native2ascii [options] [inputfile [outputfile]]

DESCRIPTION
The Java compiler and other Java tools can only process files which contain Latin-1 and/or Unicode-encoded (/udddd notation) characters. native2ascii converts files which contain other character encodings into files containing Latin-1 and/or Unicode-encoded charaters. 
If outputfile is omitted, standard output is used for output. If, in addition, inputfile is omitted, standard input is used for input. 

OPTIONS
-reverse 
Perform the reverse operation: convert a file with Latin-1 and/or Unicode encoded characters to one with native-encoded characters. 


-encoding encoding_name 
Specify the encoding name which is used by the conversion procedure. The default encoding is taken from System property file.encoding. The encoding_name string must be a string taken from the first column of the table below. 

native2ascii-本地码-至-ASCII 码转换器

将含有本地编码字符(既非 Latin1 又非 Unicode 字符)的文件转换为 Unicode 编码字符的文件。 

结构

native2ascii [options] [inputfile [outputfile]]

说明

Java 编译器和其它 Java 工具只能处理含有 Latin-1 和/或 Unicode 编码(/udddd 记号)字符的文件。native2ascii 将含有其它字符编码的文件转换成含 Latin-1 和/或 Unicode 编码字符的文件。 

若省略 outputfile,则使用标准输出设备输出。此外,如果也省略 inputfile,则使用标准输入设备输入。 

选项

-reverse 
执行相反的操作:将含 Latin-1 和/或 Unicode 编码字符的文件转换成含本地编码字符的文件: 

-encoding encoding_name 
指定转换过程使用的编码名称。缺省的编码从系统属性  file.encoding 中得到。encoding_name 字符串必须是下表第一栏所示的字符串。


-------------------------------------------------------------

Converter        Description
Class
-------------------------------------------------------------

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, Traditional Chinese
CNS11643         CNS 11643, Traditional Chinese
Cp037            USA, Canada(Bilingual, French), Netherlands,
                               Portugal, Brazil, Australia
Cp1006           IBM AIX Pakistan (Urdu)
Cp1025           IBM Multilingual Cyrillic: Bulgaria, Bosnia,
                               Herzegovinia, Macedonia(FYR)
Cp1026           IBM Latin-5, Turkey
Cp1046           IBM Open Edition US EBCDIC
Cp1097           IBM Iran(Farsi)/Persian
Cp1098           IBM Iran(Farsi)/Persian (PC)
Cp1112           IBM Latvia, Lithuania
Cp1122           IBM Estonia
Cp1123           IBM Ukraine
Cp1124           IBM AIX Ukraine
Cp1125           IBM Ukraine (PC)
Cp1250           Windows Eastern European
Cp1251           Windows Cyrillic
Cp1252           Windows Latin-1
Cp1253           Windows Greek
Cp1254           Windows Turkish
Cp1255           Windows Hebrew
Cp1256           Windows Arabic
Cp1257           Windows Baltic
Cp1258           Windows Vietnamese
Cp1381           IBM OS/2, DOS People's Republic of China (PRC)
Cp1383           IBM AIX People's Republic of China (PRC)
Cp273            IBM Austria, Germany
Cp277            IBM Denmark, Norway
Cp278            IBM Finland, Sweden
Cp280            IBM Italy
Cp284            IBM Catalan/Spain, Spanish Latin America
Cp285            IBM United Kingdom, Ireland
Cp297            IBM France
Cp33722          IBM-eucJP - Japanese (superset of 5050)
Cp420            IBM Arabic
Cp424            IBM Hebrew
Cp437            MS-DOS United States, Australia, New Zealand,
                               South Africa
Cp500            EBCDIC 500V1
Cp737            PC Greek
Cp775            PC Baltic
Cp838            IBM Thailand extended SBCS
Cp850            MS-DOS Latin-1
Cp852            MS-DOS Latin-2
Cp855            IBM Cyrillic
Cp857            IBM Turkish
Cp860            MS-DOS Portuguese
Cp861            MS-DOS Icelandic
Cp862            PC Hebrew
Cp863            MS-DOS Canadian French
Cp864            PC Arabic
Cp865            MS-DOS Nordic
Cp866            MS-DOS Russian
Cp868            MS-DOS Pakistan
Cp869            IBM Modern Greek
Cp870            IBM Multilingual Latin-2
Cp871            IBM Iceland
Cp874            IBM Thai
Cp875            IBM Greek
Cp918            IBM Pakistan(Urdu)
Cp921            IBM Latvia, Lithuania (AIX, DOS)
Cp922            IBM Estonia (AIX, DOS)
Cp930            Japanese Katakana-Kanji mixed with 4370 UDC,
                               superset of 5026
Cp933            Korean Mixed with 1880 UDC, superset of 5029
Cp935            Simplified Chinese Host mixed with 1880 UDC,
                               superset of 5031
Cp937            Traditional Chinese Host miexed with 6204 UDC,
                               superset of 5033
Cp939            Japanese Latin Kanji mixed with 4370 UDC,
                               superset of 5035
Cp942            Japanese (OS/2) superset of 932
Cp948            OS/2 Chinese (Taiwan) superset of 938
Cp949            PC Korean
Cp950            PC Chinese (Hong Kong, Taiwan)
Cp964            AIX Chinese (Taiwan)
Cp970            AIX Korean
EUCJIS           JIS, EUC Encoding, Japanese
GB2312           GB2312, EUC encoding, Simplified Chinese
GBK              GBK, Simplified Chinese
ISO2022CN        ISO 2022 CN, Chinese
ISO2022CN_CNS    CNS 11643 in ISO-2022-CN form, T. Chinese
ISO2022CN_GB     GB 2312 in ISO-2022-CN form, S. Chinese
ISO2022KR        ISO 2022 KR, Korean
JIS              JIS, Japanese
JIS0208          JIS 0208, Japanese
KOI8_R           KOI8-R, Russian
KSC5601          KS C 5601, Korean
MS874            Windows Thai
MacArabic        Macintosh Arabic
MacCentralEurope Macintosh Latin-2
MacCroatian      Macintosh Croatian
MacCyrillic      Macintosh Cyrillic
MacDingbat       Macintosh Dingbat
MacGreek         Macintosh Greek
MacHebrew        Macintosh Hebrew
MacIceland       Macintosh Iceland
MacRoman         Macintosh Roman
MacRomania       Macintosh Romania
MacSymbol        Macintosh Symbol
MacThai          Macintosh Thai
MacTurkish       Macintosh Turkish
MacUkraine       Macintosh Ukraine
SJIS             Shift-JIS, Japanese
UTF8             UTF-8

-------------------------------------------------------------

转换器        说明

-------------------------------------------------------------

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

native2ascii命令的另一种使用方法 :  

以前只知道native2ascii命令可以读入一个文件,并对改文件中的本地字符集转换为ascii码。今天发现这个工具可以用来实时地对字符进行转换。方法如下:
在命令行输入:native2ascii
直接回车,此时命令窗口光标闪烁,等待输入。这时你可以切换到中文输入下,输入任何中文字符或字串,回车后native2ascii立即进行转换并输出。

举例:
d:/native2ascii  <Enter>
中文 <Enter>
/u4e2d/u6587

 



不过WTK可以直接解决JAD的中文问题:
 settings>MidLets>MidLet-1属性改成你想要显示的中文后重新生成JAD和JAR文件即可。

JAVA字符的编码
一、概要
在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。
二、基本概念
2.1 JAVA中字符的表达
JAVA中有char、byte、String这几个概念。char 指的是一个UNICODE字符,为16位的整数。byte 是字节,字符串在网络传输或存储前需要转换为byte数组。在从网络接收或从存储设备读取后需要将byte数组转换成String。String是字符串,可以看成是由char 组成的数组。String 和 char 为内存形式,byte是网络传输或存储的序列化形式。
 举例:

String ying = “英”;
char ying = ying.charAt(0);
String yingHex = Integer.toHexString(ying);
82 F1   
byte yingGBBytes = ying.getBytes(“GBK”);
GB编码的字节数值
D3 A2 

2.2 编码方式的简介
 String序列化成byte数组或反序列化时需要选择正确的编码方式。如果编码方式不正确,就会得到一些0x3F的值。常用的字符编码方式有ISO8859_1、GB2312、GBK、UTF-8/UTF-16/UTF-32。
ISO8859_1用来编码拉丁文,它由单字节(0-255)组成。
 GB2312、GBK用来编码简体中文,它有单字节和双字节混合组成。最高位为1的字节和下一个字节构成一个汉字,最高位为0的字节是ASCII码。
UTF-8/UTF-16/UTF-32是国际标准UNICODE的编码方式。 用得最多的是UTF-8,主要是因为它在对拉丁文编码时节约空间。

UNICODE值 UTF-8编码
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF:  110xxxxx 10xxxxxx 
U-00000800 - U-0000FFFF:  1110xxxx 10xxxxxx 10xxxxxx 
U-00010000 - U-001FFFFF:  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-00200000 - U-03FFFFFF:  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-04000000 - U-7FFFFFFF:  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 

三、J2SE中相关的函数
String str =”英”;
 //取得GB2312编码的字节
byte[] bytesGB2312 = str.getBytes(“GB2312”); 

//取得平台缺省编码的字节(solaris为ISO8859_1,windows为GB2312)
byte[] bytesDefault = str.getBytes();

//用指定的编码将字节转换成字符串
 String newStrGB = new String(bytesGB2312, “GB2312”);
 
//用平台缺省的编码将字节转换成字符串(solaris为ISO8859_1,windows为GB2312)
 String newStrDefault = new String(bytesDefault);

 //用指定的编码从字节流里面读取字符
InputStream in = xxx;
InputStreamReader reader = InputStreamReader( in, “GB2312”);
char aChar = reader.read();
四、JSP、数据库的编码
4.1 JSP中的编码
(1) 静态声明:
CHARSET有两个作用:
JSP文件的编码方式:在读取JSP文件、生成JAVA类时,源JSP文件中汉字的编码
JSP输出流的编码方式:在执行JSP时,往response流里面写入数据的编码方式
(2) 动态改变:在往response流里面写数据前可以调用response.setContentType(),设定正确的编码类型。
(3) 在TOMCAT中,由Request.getParameter() 得到的参数,编码方式都是ISO8859_1。所以如果在浏览器输入框内输入一个汉字“英”,在服务器端就得到一个ISO8859_1编码的(0x00,0xD3,0x00,0xA2)。所以通常在接收参数时转码:
String wrongStr = response.getParameter(“name”);
String correctStr = new String(wrongStr.getBytes(“ISO8859_1”),”GB2312”);
在最新的SERVLET规范里面,也可以在获取参数之前执行如下代码:
request.setCharacterEncoding(“GB2312”);

4.2 数据库的编码
(1) 数据库使用UTF-16
如果String中是UNICODE字符,写入读出时不需要转码
(2) 数据库使用ISO8859_1
如果String中是UNICODE字符,写入读出时需要转码
写入:String newStr = new String(oldStr.getByte(“GB2312”), “ISO8859_1”);
读出:String newStr = new String(oldStr.getByte(“ISO8859_1”),”GB2312”);
五、源文件的编码
5.1 资源文件
资源文件的编码方式和编辑平台相关。在WINDOWS平台下编写的资源文件,以GB2312方式编码。在编译时需要转码,以确保在各个平台上的正确性:
native2ascii –encoding GB2312 source.properties
这样从资源文件中读出的就是正确的UNICODE字符串。
5.2 源文件
源文件的编码方式和编辑平台相关。在WINDOWS平台下开发的源文件,以GB2312方式编码。在编译的时候,需要指定源文件的编码方式:
javac –encoding GB2312
 JAVA编译后生成的字节文件的编码为UTF-8。

①最新版TOMCAT4.1.18支持request.setCharacterEncoding(String enc)
②资源文件转码成company.name=/u82f1/u65af/u514b
③如果数据库使用utf-16则不需要这部分转码
④页面上应有
转码ⅰ:
String s = new String
(request.getParameter(“name”).getBytes(“ISO8859_1”),”GB2312”);
转码ⅱ:
String s = new String(name.getBytes(“GB2312”),”ISO8859_1”);
转码ⅲ:
String s = new String(name.getBytes(“ISO8859_1”),” GB2312”);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值