字符集系列一之痛苦的resin

2021-03-31 15:36:27 字數 926 閱讀 7306

本機環境:windows2000 professional 簡體中文版

伺服器環境:linux bsd 2.4.26

resin執行系統變數:lang:zh_**,lc_all:空

乙個字符集的問題,折磨了我大半天,終於找到了原因,發給大家,遇到了就不要再這麼痛苦了。

這是乙個特別簡單的例子,我們在httprequest中有乙個字「碁」,比較特殊,存檔後成為「?」。這個字在gbk中存在,在gb2312字符集中不存在。

servlet中是這麼處理的:

chinesename=uploadrequest.getparameter("**ame");

非常標準的用法,在本機環境中測試正常,放到伺服器上存檔亂碼。

其形成原因有兩點:

1、伺服器上的字符集為gb2312,不支援此字。

2、resin的httprequest實現與其他伺服器不同.

大多伺服器的請求流都是以"iso8895-1"字符集為預設實現,此時標準正確的處理方法為:

chinesename=uploadrequest.getparameter("**ame");

chinesename=stringutil.iso2gbk(chinesename);

但是在resin中,由於httprequest.getparameter物件返回的是本地預設編碼的字串,伺服器上也就是gb2312,導致出現亂碼現象,而windows中文版下就是gbk,所以正常。

這是從現象中總結出來的,與網上說的resin的情況不是很相符,不知是我的resin版本太老還是理解錯誤,不過,只需要將linux下的啟動環境變數,lang,lc_all改變一下( lang=zh_**; lc_all=zh_**.gbk; export lang lc_all 設定),就可以解決問題。

如果哪位知道更加詳細準確的關於resin的字符集處理的資料,請務必同志我,不甚感激。

字符集和字符集編碼雜談系列之我見

記得從看 windows程式設計 時就遇到過這個問題,字元編碼,字符集傻傻分不清楚,每次感覺弄清楚了,但不久遇到後又混亂了。所以這次記下一些自己的理解。簡而言之,即使一些字元的集合。不同的字符集包含不同的字元。如上所說,字符集只是一些字元的集合,並沒有定義這些字元如何在計算機記憶體中如何表示。於是,...

掃盲系列之字符集編碼常識

隨著網際網路的發展,字符集的發展也是與時俱進的,從最初的ascii到現在逐漸取代ascii的unicode,這期間還產生了很多其他的字符集和編碼格式。下面主要介紹幾個在日常開發中比較常見的字符集編碼。在介紹具體的幾種字符集編碼之前,我們先了解一些基礎的概念。早期的ascii主要是對英語中的字母來進行...

HTML之字符集總結

語言字符集彙總 1 ascii碼 1個位元組 0 127位使用了,共128個位置 現代英語字元 一些西歐語言字元 美國某些標準化組織制定的 2 擴充套件ascii碼 1個位元組 128 256位使用了,共128個位置 指的就是ibm擴充套件字符集,僅僅是一段時期內的範圍標準,但最終沒成為國際標準。i...