`
jiasudu1649
  • 浏览: 722934 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

资源文件及native2ascii应用

阅读更多

1,原理

Property 文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。而在Java程序中读取Property文件的时候使用的是Unicode编码方 式,这种编码方式不同会导致中文乱码。因此需要将Property文件中的中文字符转化成Unicode编码方式才能正常显示中文。



2,解决办法

Java提供了专门的工具对Property文件进行Unicode转化,这种工具就是native2ascii,它在JDK安装环境的bin目录下。

native2ascii 工具将带有本机编码字符(非拉丁 1 和非单一码字符)的文件转换成带有Unicode编码字符的文件。

假设需要转化的属性文件为:D:\src\resources.properties(含有中文字符)

转化后的属性文件为:D:\classes\resources.properties(中文字符统一转化为Unicode)

那么使用如下命令
JAVA_HOME\bin\native2ascii -encoding GBK D:\src\resources.properties D:\classes\resources.properties

就能将含有中文字符的属性文件转化成单一Unicode编码方式的属性文件。中文乱码自然会被解决。 

背景: 在做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
结果还是没有转码。
从结果可以得出结论:对于纯数字和字母的文本类型件,转码前后的内容是一样的。

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
评论

相关推荐

    native2ascii 命令的使用

    总的来说,`native2ascii`是Java开发中的一个重要工具,尤其对于处理多语言资源文件时,它能确保代码的可移植性和兼容性。通过合理使用`native2ascii`,开发者可以轻松地管理包含非ASCII字符的资源,从而提升项目的...

    native2ascii图形界面工具

    在Java开发中,由于Java源代码只支持ASCII字符集,但某些资源文件(如属性文件)可能包含本地化的非ASCII字符,这时就需要使用`native2ascii`工具将这些字符转换为可被Java理解的转义序列。 描述中的“简单易用”...

    native2ascii

    此外,在构建跨平台的Java应用程序时,使用`Native2Ascii`转换资源文件编码,能够有效避免因操作系统默认编码差异导致的乱码问题,使软件更加健壮和稳定。 综上所述,`Native2Ascii`作为JDK提供的实用工具,虽小却...

    在线native2ascii。方便很多

    在Java开发中,native2ascii工具是用于处理非ASCII字符的,特别是处理包含特殊字符(如中文、日文等)的资源文件时,需要将其转换为ASCII编码以便Java虚拟机可以正确读取。这个在线版本的工具使得开发者无需在本地...

    HTA版资源文件编码转换器native2ascii

    标题中的“HTA版资源文件编码转换器native2ascii”指的是一个基于HTML应用程序(HTML Application,简称HTA)的工具,用于将Java的资源文件从一种编码格式转换为另一种,特别是涉及国际化(i18n)时需要进行的ASCII...

    native2ascii.exe java的转码工具

    1. 资源文件:在创建Java国际化的资源文件(如`.properties`)时,`native2ascii.exe`用于将非ASCII字符转换为Unicode转义序列,保证资源文件在不同操作系统和编码环境下都能正确读取。 2. 字符串常量:当Java代码...

    native2ascii-crx插件

    "native2ascii"工具就是为此目的而设计的,它能够将本地化资源文件中的非ASCII字符转换为相应的Unicode转义序列。而"native2ascii-crx"插件则是在这个基础上,提供了一种更便捷、用户友好的方式来实现这一过程,尤其...

    java net unicode / native2ascii / url decode / url encode / UTF8 / js url code

    这是因为在某些平台上,如Windows,文件名和资源文件可能不支持Unicode,这时就需要用`native2ascii`来处理。 3. **URL Decode / URL Encode**:在网络编程中,URL(统一资源定位符)可能会包含特殊字符,如空格、...

    properties文件文中乱码问题解决.doc

    解决方法是在 Eclipse 中修改 Properties 资源文件的默认编码为GBK,然后使用 JDK 的 native2ascii 工具将 Properties 文件转换为 Unicode 编码字符的文件。native2ascii 是一个本地码到 ASCII 码转换器,可以将含有...

    Struts中的国际化(资源文件的应用)

    例如,使用`native2ascii`工具将GBK编码的文本转换为UTF-8编码的`.properties`文件。 在Struts的配置文件(如`struts-config.xml`)中,你需要声明资源文件的位置,通常使用`<message-resources>`标签。例如: ```...

    Struts2资源文件在jsp页面中显示乱码解决

    一种解决方案是使用`native2ascii`工具将资源文件转换为特定的编码格式,例如UTF-8。具体步骤如下: 1. 打开命令行窗口,切换至包含资源文件的目录。 2. 运行命令`native2ascii -encoding UTF-8 messageResources_...

    Struts2国际化转码小工具

    `native2ascii`工具是Java开发中的一个实用程序,用于在Unicode和ASCII之间转换文本,这对于处理非英文字符(如中文、日文等)尤其有用,这些字符在某些系统或文件格式中可能无法正确显示。 在Java中,国际化通常...

    ascii 转码工具 ~~~~

    Java JDK中的`native2ascii`命令行工具就是用于进行这种转换的,它能够将本地编码(非ASCII)的资源文件转换为ASCII格式,以便Java程序可以正确读取。然而,这个命令行工具可能对于一些用户来说操作不够直观,尤其是...

    structs中*.properties中文资源文件的创建方法

    这里提到了一个名为`native2ascii`的命令行工具,该工具可以用来转换资源文件的编码。 ##### 使用native2ascii工具 - 命令格式: ``` native2ascii [-encoding Encoding] inputfile outputfile ``` 其中: - ...

    资源文件插件(Eclipse3.2)

    当编辑完.properties文件并保存时,资源文件插件会自动调用内部实现的native2ascii功能,对文件进行编译,无需离开IDE或手动执行外部命令。这一特性使得开发者可以更加专注于代码编写,减少了不必要的上下文切换,...

    UnicodeTool

    在处理包含特殊字符或非ASCII字符的资源文件时,这个工具尤其有用。然而,`native2ascii`作为一个命令行工具,其操作对一些开发者来说可能不够直观,尤其是在频繁进行转换或需要处理大量文件时。 "UnicodeTool"正是...

Global site tag (gtag.js) - Google Analytics