关于宽字符和窄字符

宽窄字符与UTF16,UTF8不是对应的关系。宽窄字符是与一个字符所占的字节数有关,如果
一个字符只占一个字节,那么那么它就是窄字符,一个宽字符通常占2个字节。在c/c++/objective c
中,如果你想把一个窄字符(例如ASCII 字符)表示为宽字符通常的做法是使用wchar来取代char,例如
wchar t = 'A';
wchar_t * p = L"Hello!" ;
这里每一个字符都占了2个字节,并且采用了UTF16编码。
2. UTF8和UTF16是unicode的两种编码方法,他们都是采用了可变的字节长度来表示一个字符,例如UTF8是
使用1个字节到4个字节来表示世界上各种语言的不同字符。而UTF16则是2个字节到6个(?记不清了)字节来表示不同
字符。他们的最主要区别在于字符的最小字节数(UTF8是1,UTF16是2)。这也就造成了UTF8可以和ASCII
编码相兼容(那7位的ASCII字符在ASCII与UTF-8下的编码是相同的),但是UTF16却不可以,以至于对于UTF16的字符串我们必须使用类似于wprintf专门的函数来处理宽字符。
另外对于mac os objective c下普通c string采用的是UTF8编码,所以
在英文系统下你通过printf依然可以正确的输出中文等字符,例如:
const char* str = "你好";
printf("%s", str);
这里printf支持utf8,并不会出现乱码。
但是如果使用
const char* str = "你好";
NSLog(@"%s", str);
输出的却是乱码,很奇怪,NSLog竟然不支持utf8。
如果想要输出正常,只能
const wchar_t* str1 = L"你好";
NSLog(@"%S", str1);
NSLog可以支持UTF16。注意这里是%S,而不是%s。

其实既然使用objective c来做mac开发,应尽量使用NSString,
这样就可以减少编码上的问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9059159/viewspace-592606/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9059159/viewspace-592606/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值