`
yong7181000
  • 浏览: 29490 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java编码研究

阅读更多

 

package com.javaeye.lindows.test;
public class TestAscii {
//ascii码值转换成字符串
static int y = 97;
static char x = (char) y; 
//字符串转换成ascii码值
static char b = 'a';
static int a = (int)b; 
public static void main(String[] args) {
System.out.println(x);
System.out.println(a);
}
}
Java代码
  1. package com.javaeye.lindows.test;  
  2.   
  3. public class TestAscii {  
  4.     //ascii码值转换成字符串  
  5.     static int y = 97;  
  6.     static char x = (char) y;   
  7.       
  8.     //字符串转换成ascii码值  
  9.     static char b = 'a';  
  10.     static int a = (int)b;   
  11.     public static void main(String[] args) {  
  12.         System.out.println(x);  
  13.         System.out.println(a);  
  14.     }  
  15. }  

 

 

http://stephen830.javaeye.com/blog/258929

http://www.netfetch.cn/netfetch/article.asp?id=676

 

Utf-8编码在国外应用普遍,为什么在国内应用却不多呢? 
尤其各大门户网站采用Utf-8的几乎没有。 
是否采用Utf-8,这个问题大家争论已久,但是很少有人系统地解说为什么要采用Utf-8编码? 
凡事皆有正反!采用Utf-8编码同样有其利弊,当利大于弊,我们当然就采用Utf-8? 

关于UTF-8编码和中文字符集 
中文有三种字符集,统一文字的编码将是进一步交流的基础。 

·国内网站和BLOG较多使用简体中文编码GB2312 字符集; 
·港澳台地区网站和部落格使用繁体中文网页编码BIG5字符集; 
·UTF-8 包含了简体和繁体中文字符,能正确显示多种语言文字. 

统一编码带来的交流便利将在trackback等功能上体现出。 

计算机对多国语言的支持 
通常在文档只需支持一种语言的情况下,编码只需收录该语言内的字元。最常见的就是拉丁字母用ASCII、简体中文用GB2312、繁体中文用BIG5等。 
在越来越国际化的环境下,多语言支持对于软件开发已不再是个可有可无的而是必须的功能。UTF-8就提供了可在同文档同时支持多语言。例如, 

汉字:简体字,繁體字 
韩文:한국어 
阿拉伯文:العربيه 

目前很多软件对UTF-8的支持都不太好、开发工具对UTF-8的支持也不全、程序员对UTF-8的了解不深,所以用UTF-8时会碰见许多问题。但我们坚信UTF8是对于多语言支持的趋势也是基础。 

Unicode 问答集 
问:什么是Unicode? 
答:Unicode 给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。Unicode标准已经被这些工业界的领导们所采用,例 如:Apple, HP, IBM, JustSystem, Microsoft, oracle, SAP, Sun, Sybase, Unisys和其它许多公司。最新的标准都需要Unicode,例如XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML等等,并且,Unicode是实现ISO/IEC 10646的正规方式。许多操作系统,所有最新的浏览器和许多其他产品都支持它。Unicode标准的出现和支持它工具的存在,是近来全球软件技术最重要 的发展趋势。 

问:为什么使用Unicode? 
答:基本上,计算机只是处理数字。它们指定一个数字,来储存字母或其他字符。在创造Unicode之前,有数百种指定这些数字的编码系统。没有一 个编码可以包含足够的字符:例如,单单欧州共同体就需要好几种不同的编码来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有 的字母,标点符号,和常用的技术符号。这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的 字符。任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。 

问:举个例子吧。 
答:比如,简体中文(GB)、繁体中文(BIG5)、日文中,“赵”都是一个字,但是编码不同。在不同的编码下,BIG5的赵是0xBBAF,而 0xBBAF在GB里面就被显示为“化”,这就是乱码。而Unicode采用统一的编码,“赵”只有一个,不必管他在哪种文字里。 

问:Unicode的优点是什么? 
答:举一个最明显的例子就是Windows 2000/XP以及微软Office2000及其后的产品。因为这些软件都是Unicode内核,因此,无论何种文字,都可以在上面正常显示,而且是同屏 显示。以前,简体中文的Word文件拿到英文版打开就会是乱码,简体中文的程序在Windows英文版上运行会出现乱码,而现在一切都解决了。 

问:中国京剧戏考为什么使用Unicode? 
答:因为有些剧本中的生僻字,只在扩展字库或繁体字库中才有,有的甚至没有。而Unicode不仅包含了所有常用字和大部分生僻字,而且因为其可 扩展,在现在没有的情况下,将来也是可以扩充的。例如最新的Unicode 4.0标准,较3.0增加了很多生僻字。目前有70207个汉字。再有一点就是Unicode在将来会取代现有的GBK及BIG5。 

什么是 UCS 和 ISO 10646? 
国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 是所有其他字符集标准的一个超集. 它保证与其他字符集是双向兼容的. 就是说, 如果你将任何文本字符串翻译到 UCS格式, 然后再翻译回原编码, 你不会丢失任何信息. 

在 Unix 下使用 UCS-2 (或 UCS-4) 会导致非常严重的问题. 用这些编码的字符串会包含一些特殊的字符, 比如 '' 或 '/', 它们在 文件名和其他 C 库函数参数里都有特别的含义. 另外, 大多数使用 ASCII 文件的 UNIX 下的工具, 如果不进行重大修改是无法读取 16 位的字符的. 基于这些原因, 在文件名, 文本文件, 环境变量等地方, UCS-2 不适合作为 Unicode 的外部编码. 

UCS只是规定如何编码,并没有规定如何传输、保存这个编码。例如“汉”字的UCS编码是6C49,我可以用4个ascii数字来传输、保存这个编码;也可以用utf-8编码:3个连续的字节E6 B1 89来表示它。 

UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下: 

UCS-2编码(16进制) UTF-8 字节流(二进制) 
0000 - 007F 0xxxxxxx 
0080 - 07FF 110xxxxx 10xxxxxx 
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx 

例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。 

UTF-16 
UTF-16是Unicode的其中一个使用方式。 UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。 
它定义于ISO/IEC 10646-1的附录Q,而RFC2781也定义了相似的做法。 
在Unicode基本多文种平面定义的字符(无论是拉丁字母、汉字或其他文字或符号),一律使用2字节储存。而在辅助平面定义的字符,会以代理对(surrogate pair)的形式,以两个2字节的值来储存。 

UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却无法兼容于ASCII编码。 

多语言编码 
多语言编码的优点是可以在一个页面里同时显示多种语言。像这样,“アメリカ”、“검색센터”、“กองทัพอากาศ”。但是本地编码的方式通常只能显示一种语言的文字,其他语言的文字就乱码了。 

为什么在一个页面里会要多种文字呢?举个例子,blog经常引用别人的网站吧,那么我现在引用了这个“http://www.콘테이너시공테 크.com”,还有这个名称比较有趣的“http://www.♣.com”。这就需要多语言的编码了。(这些网站在支持punycode的浏览器里,如 mozilla, firefox,是可以直接访问的) 

再举个例子,我有一个webmail,界面是中文的,编码是GBK。朋友给我发邮件,中文的、英文的都没有问题,正常显示。可我还有朋友是以色列 的,用的是希伯来语给我发的邮件。完蛋,邮件内容都是乱码了。我得手工选择浏览器的编码才能看明白邮件的内容。遗憾的是,这时界面的“回复”按钮又成了乱 码,搞得我看不出哪个按钮是回复了。如果webmail是多语言的编码,比如UTF-8,就不会有这样了。 

UTF-8对中文为主的网站有个缺点是,页面变长了。不是内容显示变长了,而是文件的size变长了。UTF-8对一个中文字符的编码通常是3个byte,而GB2312是2个byte。 

使用UTF-8的原因 
由于要使文字档案之中的文字与ASCII兼容,故此 UTF-8 选择了使用可变长度字节来储存 Unicode ,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。 

对 UTF-8 的批评 
UTF-8 使用可变长度字节储存,使电脑程序设计变得复杂。 (故此,在电脑程序或操作系统内部,多采用UCS-2编码。) 

在旧式的中文、日文及韩文编码之中,每字符都使用2字节储存,而UTF-8须使用3字节。 (采用UTF-16编码则可只使用2字节储存。) 

泰语以往使用的ISO 8859-11,每字符只使用1字节储存,而UTF-8须使用3字节。 

此外,在Windows XP版本中的记事本程序如果保存的是编码类似于UTF-8的GB2312字符,保存重新打开后将错误显示。例如:使用记事本输入“联通”两个字或“毛”字 保存后再打开显示错误,如果不全是编码类似于UTF-8的GB2312字符则不会出现这种情况。 

下边列出一些Utf-8相关讨论: 
xdanger说:”地区编码gb2312的好处就是对于搜索引擎比较友好,特别是baidu的网页快照都是gb2312的,Google搜utf-8的效果也不如gb2312。” 

我们盲目的向utf-8靠齐是不明智的,因为使用utf-8 用英文的老外没有增加成本,但是我们为了所谓的兼容却要增加成本。

因为如果是全英文的话,数据库根本不会增加,什么意思呢,就是说如果英文站点换成utf8,只是编码方式变了一下,其他的基本上一点影响都没有, 但是带来的好处是鲜见的。其他文字已经在utf-8编码里面了,所以可以任意使用。(例如在英文站点上如果用utf-8,汉字就可以使用了,但是使用3个 字节编码,但是汉字毕竟是少数!所以他们不是很在乎。) 

但是如果在国内,情况就不同了,大部分都是汉字,用GB2312(国家标准 GB18030-2000)编码,两个字节编码,如果换成utf-8 后,就变成了3个字节,数据明显增大,有人会说utf-8解决了兼容问题,你试想一下,来中文站点的有几个是使用英文以外语言的!!如果他用英文,恭喜 你,只要你装上了GB编码,你就可以自由的使用了,因为GB中是有英文字体的!如果你担心他看不懂中文,那你用utf-8编码的中文他也是看不懂的! 

数字图书馆,也就是图书数字化,推荐使用iso 10646 (4byte编码) 

特别需要注意的是,ISO 10646 / Unicode也有多种变换形式,UTF-8和UTF-16。新近又增加了UTF-32。从数字化的发展来看,最好直接使用UCS-2而不要涉及这些变换 形式,以免造成今后转换的负担。UTF-8看来已经落后;而UTF-16(Surrogate)还不够成熟。UTF-32正处在发展当中。 

utf-8是一种歧视性的编码,采用gb2312一个汉字只需要两个字节,而utf-8要三个字节,平白无故的就要多出一个字节来,你想想这样中文文档的存储,网络传输平白又要多出多少浪费来。老外自己都承认了: 
Let’s address the problem first: UTF-8 is kind of racist. It allows us 
round-eye paleface anglophone types to tuck our characters neatly into one byte, lets most people whose languages are headquartered west of the Indus river get away with two bytes per, and penalizes India and points east by requiring them to use three bytes per character. 
就算要统一编码,作为中国人那也只能支持utf-16,而不是utf-8

引用  

当世界需要沟通时,请用Unicode! 
Unicode官方: 
http://www.unicode.org/iuc/iuc10/x-utf8.html  

http://www.unicode.org/iuc/iuc10/

 

 

 

Java中字符串与ASCII相互转换
JavaScript 汉字转换成ASCII码 
文件:alert.js 
内容: 
alert("这里输入文字后,按下'Ctrl+Shift+F'即可转换成ASCII码"); 
Properties   ASCII码转换成汉字 
文件:test.properties 
内容: 
"/u8BF7/u8F93/u5165Subscirber" 
用MyEclipse Properties Editor(UTF-8编码属性)即可转换,ok...

---------------------------------------------------------------------------------------------- 
    目前计算机 中用得最广泛的字符集及其编码,是由美国 国家标准 局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息 交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。  
    因为1位二进制数可以表示(21 =)2种状态:0、1;而2位二进制数可以表示(22)=4种状态:00 、01、10、11;依次类推,7位二进制数可以表示(27=)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符。  
    第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;  
    第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。  
    注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。  
    为了便于查询,以下列出ASCII码表:  
    第128~255号为扩展字符(不常用)  
 Web开发时,如下的ASCII码只要加上&#和;就可以变成Web可以辨认的字符了在处理特殊字符的时候特别有用,如:' 单引号在数据库查询的时候是杀手,但是如果转换成'(注意: 转换后的机构 有:&# + 字符的ASCII码值+ ; 三个部分组成)再来存数据库,就没有什么影响了。其他的字符与ASCII码的对照如下表   
参考http://hi.baidu.com/lifechipping/blog/item/f2e8b30e7e88f2e637d12259.html  

 

 

java native2ascii 基本用法

http://quan-zhao.javaeye.com/blog/48097

Java代码  收藏代码
  1. C:>native2ascii -encoding utf8 ApplicationMessages.properties ApplicationMessages_zh_CN.properties   

native2ascii详解

http://www.coderarea.net/html/bianchengyuyan/JAVA/J2SE/2009/0316/81346.html

使用native2ascii来帮助转码

http://www.javaeye.com/topic/317286

 

Java代码  收藏代码
  1. native2ascii.exe 是 Java 的一个文件转码工具,是将特殊各异的内容 转为 用指定的编码标准文体形式统一的表现出来,它通常位于 JDK_home/bin 目录下,安装好 Java SE 后,可在命令行直接使用 native2ascii 命令进行转码,示例:  
  2.   
  3. native2ascii -encoding 8859_1 c:/test.txt c:/temp.txt  
  4. 将 test.txt 文件内容用 8859_1 转码,另存为 temp.txt 文件  
  5. 格式:native2ascii -[options] [inputfile [outputfile]]  
  6.   
  7. 参数选项 options  
  8. -reverse:将 Latin-1 或 Unicode 编码转为本地编码  
  9. -encoding encoding_name:指定转换时使用的编码  
  10. inputfile:要转换的文件  
  11. outputfile:转换后的文件  
  12.   
  13. 互转(-encoding,非英文内容(如中文)转为编码符 或 编码符之间的转换),  
  14. 逆转(-reverse,通常是将编码符转为非英文内容,或非英文内容之间的转换),  
  15. 逆转时被转的文件编码和本地编码需一致,示例:  
  16.   
  17. 中文转为 ISO 8859_1 编码后,将 8859_1 码转为中文:  
  18. native2ascii -encoding 8859_1 c:/a.txt c:/b.txt,将 a 用 8859_1 转码,存为 b (8859_1 码)  
  19. native2ascii -encoding GBK c:/b.txt c:/c.txt,将 b 用 GBK 转码,存为 c (GBK 码)  
  20. native2ascii -reverse c:/c.txt c:/d.txt,将 GBK 编码 c 用本地编码转码,存为 d (中文内容)  
  21.   
  22. 中文转为 GBK 编码后,将 GBK 码转为中文:  
  23. native2ascii -encoding GBK c:/a.txt c:/b.txt,将 a 用 GBK 转码,存为 b (GBK 码)  
  24. native2ascii -reverse c:/b.txt c:/c.txt,将 GBK 编码 b 用本地编码转码,存为 c (中文内容)  
  25.   
  26. 例如struts和struts2中的国际化utf-8的转换方式:  
  27. native2ascii -encoding UTF-8 ApplicationResources_zh_src.properties ApplicationResources_zh.properties   

 

查看本地windows的字符集方法

http://space.itpub.net/?uid-519536-action-viewspace-itemid-580610

1.第一种方法是在cmd命令行界面上通过chcp命令查看

C:/>chcp
Active code page: 936

2.第二种方法是在cmd命令行标题栏右键属性,在弹出对话框内可以看到当前的字符集编码

http://i.msdn.microsoft.com/cc305153.936%28en-us,MSDN.10%29.gif

用java实现native2asscii命令

http://wmj2003.javaeye.com/blog/379472

JavaEye与李刚就Struts2中的struts.i18n.encoding的较量

http://blog.csdn.net/diyucity/archive/2009/07/28/4387110.aspx

 

转自:http://blog.csdn.net/ccjjyy/article/details/6243853

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics