其實UCS2這種編碼不像GB2312、UTF-8等,它并不屬于任何語系的語言編碼,實際上是一種編碼格式的世界語。在這個世界上所有可以在計算機中使用的語言都有對應的UCS2
編碼。
正是因為Java采用了UCS2,因此,在Java中可以使用世界上任何國家的語言來為變量名、方法名、類起名,如下面代碼如下:
public class 中國
{
public String 雄起()
{
return "中國雄起";
}
}
中國 祖國 = new 中國();
System.out.println(祖國.雄起());
實際上,也可以使用其他的語言來編程,如下面用韓文和日文來定義個類:
class ???
{
public void スーパーマン() { ... }
}
由于Java內部使用的是UCS2編碼格式,因為,Java并不關心所使用的是哪種語言,而只要這種語言在UCS2中有定義就可以。 在UCS2編碼中為不同國家的語言進行了分頁,這個分頁也叫“代碼頁”或“編碼頁”。中文根據包含中文字符的多少,分了很多代碼頁,如cp935、cp936等,然而,這些都是在UCS2中的代碼頁名,而對于操作系統來說,如微軟的windows,一開始的中文編碼為GB2312,后來擴展成了GBK。其實GBK和cp936是完全等效的,用它們哪個都行。
=============================華麗麗的分隔符===============================
上面都是廢話了,這里關鍵想說的是,怎么從UCS2轉為GBK?以及怎么從GBK轉為UCS2?
網上有人提供了個方法:
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;
}
但這個并不好使,其實你拿到UCS2字節數組時(首先肯定是字節數組,編碼都不確定,誰會去給它轉成String?),直接:
String reValue = new String(bytes, "UTF-16BE");
就行了。
至于把中文轉成UCS2,則可以用:
content.getBytes("UnicodeBigUnmarked")
posted on 2013-05-30 15:37
方偉的博客 閱讀(5721)
評論(0) 編輯 收藏 所屬分類:
短信網關