Java字元編碼的轉化問題

2021-09-07 11:30:38 字數 1841 閱讀 6664

我想字串的編碼問題的確會困擾到非常多開發人員。我近期也是被困擾到了。

系統字元格式:utf-8

字串"中國"的gb2312編碼位元組陣列bs_gb和utf-8編碼位元組陣列bs_utf

byte bs_gb = ;

byte bs_utf = ;

實驗步驟:

1.首先對bs_gb分別使用gb2312編碼和utf-8編碼轉化為乙個中間結果:

string gbstr1 = new string(bs_gb, "gb2312");

string utfstr1 = new string(bs_gb, "utf-8");

結果:中國

?й?

2.對utfstr1進行gb2312編碼,實現從 gb2312編碼 -> utf-8編碼 -> gb2312編碼 的過程

string gbstr2 = new string(utfstr1.getbytes("utf-8"), "gb2312");

結果:錕叫癸拷

3.對bs_utf分別使用gb2312編碼和utf-8編碼轉化為乙個中間結果:

string gbstr3 = new string(bs_utf, "gb2312");

string utfstr2 = new string(bs_utf, "utf-8");

結果:涓??

中國4.對gbstr3進行utf-8編碼,實現從 utf-8編碼 -> gb2312編碼 -> utf-8編碼 的過程

string utfstr3 = new string(gbstr3.getbytes("gb2312"), "utf-8");

結果:??

5.根據上面4個步驟。進行gbk和utf-8之間的轉換實驗

實驗的初步結論:

utf-8編碼和gb2312編碼之間不能進行直接轉化

utf-8編碼和gbk編碼之間,僅僅能是utf-8 -> gbk -> utf-8

utf-8轉化為unicode

private static final char hexdigit = ;

private static char tohex(int nibble)

/*** 將字串編碼成 unicode。

* @param thestring 待轉換成unicode編碼的字串。

* @param escapespace 是否忽略空格 * @return 返回轉換後unicode編碼的字串。

unicode轉化為utf-8

/**

* unicode 轉換成 utf-8

* * @param thestring

* @return

*/public static string unicodetoutf8(string thestring)

}} else

} else

} return outbuffer.tostring();

}

而對於其gb2312的編碼格式是不能夠在獲得乙個字串之後再轉化成其它的編碼格式的。

比方,我的乙個字串為「中國」,我把它轉成gb2312的編碼格式為:涓��,再轉成utf-8就變成了�?

只是還好,對於經過gbk和iso-8859-1這兩種格式編碼之後的字元,再進行utf-8的轉化,是能夠轉換回來的。例如以下測試:

結果:

字元編碼轉化

ansi c定義了統一的編碼轉化函式setlocale,mbstowcs,wcstombs,但這些函式在win32平台上實現了,卻未在linux平台上實現,在linux平台上實現編碼轉化需要呼叫iconv open,iconv,iconv close函式.win32平台自己提供了兩個編碼碼轉化函式m...

java字元編碼問題

1.假設檔案用utf 8儲存了中文 操作計算機 然後使用gbk編碼進行讀取?string str fileutils.readfiletostring new file myfile gbk system.out.println str str new string str.getbytes gbk...

特殊字元的html編碼轉化

採集的資料中,原來是日文的 bur chi html 中是 bur chi,這樣做有個好處,網頁就不一定要像utf 8這樣的編碼,但是想要原來的文字,php轉半天過不來,後來發現是未指定編碼集,用 html entity decode bur chi ent noquotes,utf 8 就可以了。...