分享
 
 
 

关于字符编码及native2ascii的使用

王朝java/jsp·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

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.

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

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

不过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”);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有