專案裡面第一次嘗試使用db2資料庫,在windows端進行除錯的時候發現取到的中文是ascii編碼的,資料庫設定的是utf-8。
於是想到兩個思路解決問題:
1:再嘗試通過資料庫的設定從而直接取出utf-8的編碼;
2:從資料庫中取到ascii的編碼後再進行轉換utf-8;
第二個思路功能單一,正好是檢查新員工素質的時候啊,於是給幾個新員工提了乙個任務:使用昨天配置的eclipse c++環境編寫乙個函式,函式功能:轉換中文的編碼(ascii---utf-8)
要求:1:有錯誤處理,編碼格式錯誤要throw異常;
2:函式有注釋,使用上我給的注釋模板
3:要求有main函式。測試編碼轉換函式的時候,通過檔案讀寫來進行字串的讀寫。例如寫兩個檔案,相同的中文,不同的編碼。通過檔案讀到ascii中文,最後輸出到utf-8的檔案,自己一對比也知道函式轉換對不對了
4:一天完成,相互鼓勵討論,不鼓勵copy code
最先完成的居然是校友,看來還是有兩把刷子(中午了解了下還是學自動控制的),我測試了一下,功能ok,注釋ok,異常處理ok。
自己那條思路也趕緊想辦法吧。
首先確定資料庫設定codepage=1208 codeset=utf-8。也就是說儲存的varchar型別的資料都是utf-8格式的。
通過google搜尋:
但是放到我們的**中後發現sql_attr_utf8沒有在任何標頭檔案中定義。
後來仔細想想可能有點不對勁,可能是因為我的作業系統的緣故,我win7用的是gbk編碼,所以cli介面自動判斷給轉成gbk編碼(ascii編碼)了。
但是我寫的是後台服務程式,應該是在linux上跑著呢(目前和db2在一台機器上),沒準在linux上就沒問題了。
檢視了下linux系統設定:
/etc/sysconfig/language
rc_lang="zh_cn.utf-8"
那麼寫個簡單測試程式吧:
#include #include #include int main( int argc, char **argv)
;database=**;hostname=*.*.*.*;port=60000;protocol=tcpip;uid=db2inst1;pwd=***;";
sqlreturn clirc = sql_success;
sqlhandle henv;
sqlhandle hdbc; //資料庫連線
sqlchar conn[555];
strcpy((char*) (conn), strsqldriver);
clirc = sqlallochandle(sql_handle_env, sql_null_handle, &henv);
clirc = sqlallochandle(sql_handle_dbc, henv, &hdbc);
if (clirc != sql_success)
sqldriverconnect(hdbc, (sqlhwnd) null, conn, sql_nts, null, 0, null,
sql_driver_noprompt);
if (clirc != sql_success)
sqlhandle hstmt; //sql控制代碼
sqlallochandle(sql_handle_stmt, hdbc, &hstmt);
sqlchar *stmt = (sqlchar *) "select coalesce(address,'') from sm.test";
sqlchar val[15];
sqlinteger ind;
clirc = sqlexecdirect(hstmt, stmt, sql_nts);
clirc = sqlbindcol(hstmt, 1, sql_c_char, val, 15, &ind);
clirc = sqlfetch(hstmt);
for (int i = 0; i < 6; ++i)
clirc = sqldisconnect(hdbc);
return 0;
}
輸出比較簡單,就放倆漢子在資料庫字段裡面。
果然如想象的一樣,windows下和linux下的輸出是不一樣的。
雖然給新員工的任務排不上用場,但是也不錯,先探探虛實嘛,好像也給自己一點小壓力,自己貌似剛入職的時候能力還比較差啊。
FreeRTOS 啟動第乙個任務
freertos開始第乙個任務原始碼分析 vtaskstartscheduler 1.建立乙個空任務 優先順序為0 2.是否使用軟體定時器,是的話 建立軟體定時器 3.關閉中斷 關中斷操作的暫存器是basepri,開中斷在svc中斷服務函式中開啟 4.初始化靜態全域性變數 xnexttaskunbl...
linux的第乙個任務(程序)
linux下有3個特殊的程序,idle程序 pid 0 init程序 pid 1 和kthreadd pid 2 任務0,0號程序 開天闢地的idle程序其pid 0,其前身是系統建立的第乙個程序,也是唯一乙個沒有通過fork或者kernel thread產生的程序。完成載入系統後,演變為程序排程 ...
第乙個迭代任務的製作
1.在res裡的layout中建立三個包fenlei.xml shouye.xml xinjianshijian.xml 2.xinjianshijian.xml裡的介面和 是 3.fenlei.xml裡的介面和 是 4.shouye.xml裡的介面和 是 5.mainactivity裡的 是 6....