㈠ 为啥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之类的。