一段utf-16的string,整了好多種格式,硬是無法正確輸出到頁面上:
首先嘗試了outputstream, 即便指定string-》byte的編碼,還是出錯
resp.getoutputstream().write(out.getbytes("utf-16"));
resp.getoutputstream().print(out);
resp.getoutputstream().flush();
resp.getwriter().close();
然後嘗試過printwriter,均以失敗告終。
藉此也搞明白了response回寫內容的兩個方法:(指上面的writer和outstream)
1.printwriter
object that can send character text to the client.
2.servletoutputstream suitable for writing binary data in the response
3.callingflush()on the *** commits the response.
4.eithergetoutputstream()
orgetwriter()
may be called to write the body,not both.
但是比較詭異的是,為什麼這兩種方式(指上面的writer和outstream)會出現亂碼呢?
再看看編碼解析的過程:
uses the character encoding returned bygetcharacterencoding().
首先使用response物件的
getcharacterencoding()
,如果沒有設定,則預設編碼方式都為iso-8859-1
那麼問題也就明確了,在輸入流指定正確的編碼之後,還需要配合response的編碼引數,否則讀出來解析就亂碼
正解:
//方式1
resp.setcharacterencoding("utf-16");
resp.getwriter().print(out);
resp.getwriter().flush();
resp.getoutputstream().close();
//方式2
resp.setcharacterencoding("utf-16");
resp.getoutputstream().write(out.getbytes("utf-16"));
resp.getoutputstream().flush();
resp.getoutputstream().close();
再或者,包裝一層:
servletoutputstream out2 = resp.getoutputstream();
outputstreamwriter ow = new outputstreamwriter(out2,"utf-16");
ow.write(out);
ow.flush();
ow.close();
Linux dirty page回寫時機
1 定時方式 定時回寫是基於這樣的原則 proc sys vm dirty writeback centisecs的值表示多長時間會啟動回寫執行緒,由這個定時器啟動的回寫執行緒只回寫在記憶體中為dirty時間超過 proc sys vm didirty expire centisecs 100 秒的...
mybatis 主鍵回寫
在一張資料表中如果設定了第乙個屬性主鍵自增長,使用mybatis 新增資料成功後需要獲取主鍵,則可以通過主鍵回寫來獲取主鍵 方式一 userdao.xml中的sql新增語句 insert into t clazz classname,classloc values 方式二 使用mysql自帶的 la...
頁面回發和事件回傳
客戶端 瀏覽器 客戶端事件 傳送資料 資料 服務端 引發伺服器端事件處理程式 處理資料 處理完畢,重新形成 html 傳送 html 客戶端 瀏覽器 展示 頁面回發包含了 頁面第一次傳送到客戶端引起的 not ispostback 和客戶端事件 事件回傳 引起的頁面回發 上面的圖就是頁面回發的示意圖...