俊星的BLOG
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2009年5月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
统计
随笔 - 50
文章 - 0
评论 - 6
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
代码库(7)
(rss)
随笔档案
2010年11月 (3)
2010年10月 (12)
2009年6月 (5)
2009年5月 (22)
2009年4月 (8)
最新随笔
1. 实现变更统计
2. 切换IE8中碰到的问题
3. 发布FWMS
4. ActiveMQ初探
5. CAS初步配置
搜索
最新评论
1. re: JAVA图像缩放处理[未登录]
不错的方法
--test
2. re: freetts初探
学习了! 就是不清楚为啥在eclipse下跑不起来...
--apiao
3. re: freetts初探
System property "mbrola.base" is undefined. Will not use MBROLA voices.
这个问题怎么解决啊?
--珑儿
4. re: ActiveMQ初探
测试通过。多谢
--71569973
5. 登录网站
评论内容较长,点击标题查看
--ahome
阅读排行榜
1. ftp的port和pasv模式(转)(8024)
2. JAVA图像缩放处理(4174)
3. Nutz初步试用(4104)
4. Window下FTP命令使用(3508)
5. freetts初探(3407)
6. ActiveMQ初探(2898)
7. MYSQL Access denied 问题的解决(2340)
8. HTTP Client及HTTPS初探(1981)
9. JAVA单向加密(MD5,SHA,MAC)(1262)
10. CAS认证初探(1147)
评论排行榜
1. freetts初探(2)
2. HTTP Client及HTTPS初探(2)
3. ActiveMQ初探(1)
4. JAVA图像缩放处理(1)
5. 我的DWR之DefaultContainer(0)
JAVA字符编码
测试代码:
public
static
void
main(String[] args)
{
Locale.setDefault(Locale.US);
String str
=
"
中G中
"
;
String codes[]
=
{
"
iso8859-1
"
,
"
utf-8
"
,
"
utf-16
"
,
"
unicode
"
,
"
gbk
"
,
"
gb2312
"
}
;
try
{
System.out.println(str);
System.out.println(
"
default code:
"
+
System.getProperty(
"
file.encoding
"
));
for
(String s : codes)
{
System.out.println(s
+
"
:
"
+
toHex(str.getBytes(s)));
}
}
catch
(UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
private
static
String toHex(
byte
[] buffer)
{
StringBuffer sb
=
new
StringBuffer(buffer.length
*
3
);
for
(
int
i
=
0
; i
<
buffer.length; i
++
)
{
sb.append(Character.forDigit((buffer[i]
&
0xf0
)
>>
4
,
16
));
sb.append(Character.forDigit(buffer[i]
&
0x0f
,
16
));
sb.append(
"
"
);
}
return
sb.toString();
}
输出如下:
中G中
default code:GBK
iso8859-
1
: 3f
47
3f
utf-
8
: e4 b8 ad
47
e4 b8 ad
utf-
16
: fe ff 4e 2d
00
47
4e 2d
unicode: ff fe 2d 4e
47
00
2d 4e
gbk: d6 d0
47
d6 d0
gb2312: d6 d0
47
d6 d0
相关说明:
1、通过System.getProperty("file.encoding")获取到当前JVM的默认字符编码方式,如GBK
2、iso8859-1则是应用于英文和欧洲其他语言的单字节编码字符集,“3f”其实对应就是“?”。
3、utf-8则是unicode编码的一种转换方式(Unicode Transformation Format),兼容于ASCII编码,如对于中文则使用3个字节来存储,对于英文使用一个字节存储。
4、utf-16是unicode编码的另一种转换方式,每个直接都采用2个字节来存储,所以不兼容于ASCII;
其中“fe ff”是Byte Order Mark(BOM)表示采用的编码方式为utf-16。
5、此处的unicode输出和utf-16本质相同,只不过大小尾序的问题导致单个字节输出顺序相反;
其中对于windows和linux平台的utf-16默认采用小尾序(LE little Endion),mac平台采用大尾。
6、gbk和gb2312是中文字符集,对于每个字符均采用2个字节存储,其中gbk兼容gb2312并且还可表示繁体。
关于存储字节的计算,假设现在有N个中文和M个英文字符,则如下的计算方式(编码方式:字节数):
GBK:2*N+M
UTF-8:3*N+M
UTF-16:2*(N+M+1)
ISO8859-1:N+M
posted on 2009-05-26 00:12
俊星
阅读(219)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Powered by:
BlogJava
Copyright © 俊星