㈠ 為啥android下用到的.cpp中的sizeof(wchar_t)佔用四個位元組
暈,打個回車,結果發表了。我重新敘述下問題。我的android工程要用到C++代碼。在cygwin下gdb調試時發現sizeof(wchar_t)的結果是4,我看網上說是可以通過-fshort-wchar 來解決,於是我在mk文件中加入了下面這句話 LOCAL_CPP_FLAGS := -fshort-wchar 但是調試時發現還是佔用4個位元組。而在 Cygwin下通過vi ,新建一個.cpp文件,裡面cout << sizeof(wchar) << endl; 得出的結果卻是2。 求解,先謝謝啦
㈡ 程序員為什麼要用 linux 環境編程,用 Windows 不可以嗎
作者:pansz
鏈接:https://www.hu.com/question/32238553/answer/55632559
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
開發什麼軟體就用什麼系統,開發linux軟體用linux當然比windows方便,更多人使用linux只因為更多人需要開發運行在linux上的軟體(android也是linux)。linux搭開發環境比windows方便太多倍了。伺服器開發有很多依賴在linux下一個apt-get能搞定在windows下能累死你。編譯android源代碼,做ndk應用,用linux用方便很多。linux下所有編碼預設都utf8,而windows就存在gbk碼,utf8碼,utf16/ucs2le之間轉換的問題。 以上的問題你要說在windows下有沒有辦法,也不是沒有辦法,但都更折騰。所以選擇linux無非是為了一個簡單的原因:不折騰,少折騰。咱們辦公室堅持用windows的都是折騰黨。他們費九牛二虎之力讓windows開發環境一樣能用的時候,卻總會發現程序在windows下開發調試存在這樣那樣的問題。鑒於我們的程序最終一定是在Linux下運行的,折騰windows下的環境並無意義。我個人是經常在自己的模塊加宏定義「該功能不支持windows平台」,以避免造成不必要的麻煩。所以其實,你需要什麼開發環境,取決於你的程序在什麼環境上跑。開發蘋果軟體,用蘋果最好了,開發linux/android/伺服器軟體,用linux最好了,開發windows/wp應用,用windows最好了!~~因為這所謂最好的方式,其實都是最不折騰的方式。
㈢ python中u'string'和unicode('string')有什麼區別
首先要弄清楚的是,在python里,string object和unicode object是兩種不同的類型。
string object是由characters組成的sequence,而unicode object是Unicode code units組成的sequence。
string里的character是有多種編碼方式的,比如單位元組的ASCII,雙位元組的GB2312等等,再比如UTF-8。很明顯要想解讀string,必需知道string里的character是用哪種編碼方式,然後才能進行。
Unicode code unit又是什麼東西呢?一個Unicode code unit是一個16-bit或者32-bit的數值,每個數值代表一個unicode符號。在python里,16-bit的unicode,對應的是ucs2編碼。32-bit對應的是ucs4編碼。是不是感覺string里character的編碼沒什麼區別?反正我現在腦子里就是這樣一個印象:在Python里,ucs2或者ucs4編碼的,我們叫做unicode object,其他編碼的我們就叫做string。
至於python里的unicode到底是ucs2還是ucs4的,可以在編譯時指定。例如Linux下,要用ucs2做unicode的編碼,可以這樣
# ./configure --enable-unicode=ucs2
# make
# make install
下載的Windows預編譯版本,一般都是ucs2的。要想知道某個python運行環境是ucs2還是ucs4,可以查看sys.maxunicde,65535就是ucs2的,另一個很大的數值就是ucs4。
下面我們看看string和unicode在python里的不同
我們先看看在簡體中文Windows 2003系統下,系統編碼是GBK
>>> a = '你好'
>>> a
'/xc4/xe3/xba/xc3'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
>>> b.__class__
>>> len(a)
4
>>> len(b)
2
在一個系統編碼為UTF-8的Linux環境下
>>> a = '你好'
>>> a
'/xe4/xbd/xa0/xe5/xa5/xbd'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
>>> b.__class__
>>> len(a)
6
>>> len(b)
2
如何?簡單總結一下:
1、string直接用引號來表示,unicode在引號前加一個u
2、直接輸入的string常量會用系統預設編碼方式來編碼,例如在GBK環境下,'你好'會編碼成'/xc4/xe3/xba/xc3',而在UTF-8環境下就成了'/xe4/xbd/xa0/xe5/xa5/xbd'。
3、len(string)返回string的位元組數,len(unicode)返回的是字元數
4、很重要的一點,print unicode不會亂碼。現在我們常用的Linux、Windows系統,都是支持unicode的,版本太老的不算。比如Windows 2003支持ucs2,所以在中文Windows2003下,除了可以正常顯示預設的GBK編碼外,還可以正常顯示ucs2編碼。舉個例子,還是在中文Windows 2003的GBK環境下:
>>>a = '/xe4/xbd/xa0/xe5/xa5/xbd' # UTF-8的'你好'
>>> print a
浣犲ソ
>>> b = unicode(a, "UTF-8")
>>> b
u'/u4f60/u597d'
>>> print b
你好
應該明白了吧?
下面再說說string和unicode的相互轉換,什麼unicode()、decode()、encode()、codecs之類的。