漢字與
unicode
編碼相互轉(zhuǎn)化
(2006年7月17日?
11:07:58
)
一、????????????
概述:
??????
如果項(xiàng)目采用了
GBK
的編碼,那么漢字轉(zhuǎn)化就不是問題了。但是如果采用了
utf-8
的編碼,漢字的處理就相對(duì)比較麻煩一些。
二、????????????
功能實(shí)現(xiàn):
??????
代碼如下:
?
?1
????
//
?轉(zhuǎn)為unicode
?2
????
public
?
static
?
void
?writeUnicode(
final
?DataOutputStream?out,
?3
????????????
final
?String?value)?
{
?4
????????
try
?
{
?5
????????????
final
?String?unicode?
=
?gbEncoding(value);
?6
????????????
final
?
byte
[]?data?
=
?unicode.getBytes();
?7
????????????
final
?
int
?dataLength?
=
?data.length;
?8
?9
????????????System.out.println(
"
Data?Length?is:?
"
?
+
?dataLength);
10
????????????System.out.println(
"
Data?is:?
"
?
+
?value);
11
????????????out.writeInt(dataLength);?
//
?先寫出字符串的長(zhǎng)度
12
????????????out.write(data,?
0
,?dataLength);?
//
?然后寫出轉(zhuǎn)化后的字符串
13
????????}
?
catch
?(IOException?e)?
{
14
15
????????}
16
????}
17
18
????
public
?
static
?String?gbEncoding(
final
?String?gbString)?
{
19
????????
char
[]?utfBytes?
=
?gbString.toCharArray();
20
????????String?unicodeBytes?
=
?
""
;
21
????????
for
?(
int
?byteIndex?
=
?
0
;?byteIndex?
<
?utfBytes.length;?byteIndex
++
)?
{
22
????????????String?hexB?
=
?Integer.toHexString(utfBytes[byteIndex]);
23
????????????
if
?(hexB.length()?
<=
?
2
)?
{
24
????????????????hexB?
=
?
"
00
"
?
+
?hexB;
25
????????????}
26
????????????unicodeBytes?
=
?unicodeBytes?
+
?
"
\\u
"
?
+
?hexB;
27
????????}
28
????????
//
?System.out.println("unicodeBytes?is:?"?+?unicodeBytes);
29
????????
return
?unicodeBytes;
30
????}
31
32
????
/**?*/
/**
33
?????*?This?method?will?decode?the?String?to?a?recognized?String?in?ui.
34
?????*?功能:將unicod碼轉(zhuǎn)為需要的格式(utf-8)
35
?????*?
@author
?javajohn
36
?????*?
@param
?dataStr
37
?????*?
@return
38
?????
*/
39
????
public
?
static
?StringBuffer?decodeUnicode(
final
?String?dataStr)?
{
40
????????
final
?StringBuffer?buffer?
=
?
new
?StringBuffer();
41
????????String?tempStr?
=
?
""
;
42
????????String?operStr?
=
?dataStr;
43
????????
if
(operStr?
!=
?
null
?
&&
?operStr.indexOf(
"
\\u
"
)?
==
?
-
1
)?
return
?buffer.append(operStr);
//
44
????????
if
(operStr?
!=
?
null
?
&&
?
!
operStr.equals(
""
)?
&&
?
!
operStr.startsWith(
"
\\u
"
))
{
//
45
????????????tempStr?
=
?operStr.substring(
0
,operStr.indexOf(
"
\\u
"
));
//?
46
????????????operStr?=?operStr.substring(operStr.indexOf("\\u"),operStr.length());//operStr字符一定是以u(píng)nicode編碼字符打頭的字符串
47
????????}
48
????????buffer.append(tempStr);
49
????????
while
?(operStr?
!=
?
null
?
&&
?
!
operStr.equals(
""
)?
&&
?operStr.startsWith(
"
\\u
"
))
{
//
循環(huán)處理,處理對(duì)象一定是以u(píng)nicode編碼字符打頭的字符串
50
????????????tempStr?
=
?operStr.substring(
0
,
6
);
51
????????????operStr?
=
?operStr.substring(
6
,operStr.length());
52
????????????String?charStr?
=
?
""
;
53
????????????charStr?
=
?tempStr.substring(
2
,?tempStr.length());
54
????????????
char
?letter?
=
?(
char
)?Integer.parseInt(charStr,?
16
);?
//
?16進(jìn)制parse整形字符串。
55
????????????buffer.append(
new
?Character(letter).toString());
56
????????????
if
(operStr.indexOf(
"
\\u
"
)?
==
?
-
1
)
{
//?
57
????????????????buffer.append(operStr);
58
????????????}
else
{
//
處理operStr使其打頭字符為unicode字符
59
????????????????tempStr?
=
?operStr.substring(
0
,operStr.indexOf(
"
\\u
"
));
60
????????????????operStr?
=
?operStr.substring(operStr.indexOf(
"
\\u
"
),operStr.length());
61
????????????????buffer.append(tempStr);
62
????????????}
63
????????}
64
????????
return
?buffer;
65
????}
一、????????????
結(jié)尾: