MyException - 我的異常網
當前位置:我的異常網» 軟件架構設計 » 中文編碼及作圖

cf手游辅助瞄准进阶模式什么意思:中文編碼及作圖

cf手游刷枪永久枪软件 www.yqwdk.icu  網友分享于:2018-06-06  瀏覽:0次
中文編碼及繪制
最近一個任務是判斷一個字符串是不是中文,并將其繪制到一個jpg文件上。對于編碼一直挺糊涂的,這次梳理了一下。

對于一個文件,可以使用file -i a.txt查看它的編碼格式(不知怎么回事,我的終端是utf-8,在vim中輸入中文時,老是出現亂碼,只能在notepad++中編輯好之后再上傳到linux上,可能是vim的設置有問題。)當終端和文件的編碼方式一致時,就能顯示正常的中文。

回到c++,當你寫了char *str = "一二三四五六七八";時,其實這段文字在內存中是使用utf-8方式(默認,下同)編碼的。所以這個字符串的長度是編碼的長度加上"\0"共25。當你用printf把這段文字打印出來時,和前面文本文檔是一樣的。保存字符串,還有一種方式是使用wchar_t的方式,這種方式對應的就是unicode。這種方式的賦值方式為wchar_t *str = L"一二三四五六七八";,前面的L是告訴編譯器,將這段字符最為寬字節進行內存分配。wchar_t在Windows下是2個字節,在Linux下是4個字節。這樣,這個寬字符串的長度就是字符長度8加上一個結尾的符號,為9。這時候每個字符和中文是一一對應的。比如,str[0]的值就是19968,對應的就是“一”這個中文的unicode編碼0x4e00。這時直接用printf打印是有亂碼的,可以使用"%ls"進行打印,告訴函數打印的是寬字符,或者使用wprintf進行打印。

另外就是普通字符串和寬字符字符串之間轉換,可以使用mbstowcs和wcstombs函數,但是直接調用,會失敗,errno為48,我上網查了一下,需要在調用之前設置setlocale(LC_CTYPE, "en_US.UTF-8"); 或者setlocale(LC_ALL, "");,原因我也不太懂。

最后是繪制文字,Opencv是沒辦法直接繪制文字的,需要加載相應的文字庫,而且需要結合freetype的庫(網上的好像有點問題,我修改了一下),看代碼還是比較簡單的。

文章評論

軟件開發程序錯誤異常cf手游刷枪永久枪软件Copyright © 2009-2015 MyException 版權所有