其實(shí)UCS2這種編碼不像GB2312、UTF-8等,它并不屬于任何語(yǔ)系的語(yǔ)言編碼,實(shí)際上是一種編碼格式的世界語(yǔ)。在這個(gè)世界上所有可以在計(jì)算機(jī)中使用的語(yǔ)言都有對(duì)應(yīng)的UCS2
編碼。
正是因?yàn)?/span>Java采用了UCS2,因此,在Java中可以使用世界上任何國(guó)家的語(yǔ)言來為變量名、方法名、類起名,如下面代碼如下:
public class 中國(guó)
{
public String 雄起()
{
return "中國(guó)雄起";
}
}
中國(guó) 祖國(guó) = new 中國(guó)();
System.out.println(祖國(guó).雄起());
實(shí)際上,也可以使用其他的語(yǔ)言來編程,如下面用韓文和日文來定義個(gè)類:
class ???
{
public void スーパーマン() { ... }
}
由于Java內(nèi)部使用的是UCS2編碼格式,因?yàn)椋?/span>Java并不關(guān)心所使用的是哪種語(yǔ)言,而只要這種語(yǔ)言在UCS2中有定義就可以。 在UCS2編碼中為不同國(guó)家的語(yǔ)言進(jìn)行了分頁(yè),這個(gè)分頁(yè)也叫“代碼頁(yè)”或“編碼頁(yè)”。中文根據(jù)包含中文字符的多少,分了很多代碼頁(yè),如cp935、cp936等,然而,這些都是在UCS2中的代碼頁(yè)名,而對(duì)于操作系統(tǒng)來說,如微軟的windows,一開始的中文編碼為GB2312,后來擴(kuò)展成了GBK。其實(shí)GBK和cp936是完全等效的,用它們哪個(gè)都行。
=============================華麗麗的分隔符===============================
上面都是廢話了,這里關(guān)鍵想說的是,怎么從UCS2轉(zhuǎn)為GBK?以及怎么從GBK轉(zhuǎn)為UCS2?
網(wǎng)上有人提供了個(gè)方法:
public static String decodeUCS2(String src) {
byte[] bytes = new byte[src.length() / 2];
for (int i = 0; i < src.length(); i += 2) {
bytes[i / 2] = (byte) (Integer.parseInt(src.substring(i, i + 2), 16));
}
String reValue;
try {
reValue = new String(bytes, "UTF-16BE");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return reValue;
}
但這個(gè)并不好使,其實(shí)你拿到UCS2字節(jié)數(shù)組時(shí)(首先肯定是字節(jié)數(shù)組,編碼都不確定,誰會(huì)去給它轉(zhuǎn)成String?),直接:
String reValue = new String(bytes, "UTF-16BE");
就行了。
至于把中文轉(zhuǎn)成UCS2,則可以用:
content.getBytes("UnicodeBigUnmarked")
posted on 2013-05-30 15:37
方偉的博客 閱讀(5738)
評(píng)論(0) 編輯 收藏 所屬分類:
短信網(wǎng)關(guān)