关于宽字符和窄字符
来源:互联网 发布:知微科技 编辑:程序博客网 时间:2024/05/16 07:25
宽窄字符与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,
这样就可以减少编码上的问题。
一个字符只占一个字节,那么那么它就是窄字符,一个宽字符通常占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,
这样就可以减少编码上的问题。
- 关于宽字符和窄字符
- 宽字符和字符
- 宽字符 和 字符 转换
- 宽字符 和 Char字符
- 输出字符和宽字符
- 关于宽字符
- 关于宽字符
- 关于C++字符 以及编码 宽字符
- 关于字符数组和字符串
- 关于字符集 和 字符编码
- 关于字符和nls参数
- 关于字符集和字符编码
- 窄字符转宽字符
- 宽字符和窄字符的转换接口
- 宽字符和窄字符的转换接口
- 宽字符和窄字符的转换接口
- 宽字符和多字节(窄字符)转换
- VS中常见的宽字符和窄字符转换
- DOS批处理简介(上)
- JSCal2使用指南2
- DOS批处理简介(下)
- js控制的DIV一些属性 scrollLeft,scrollWidth,clientWidth,offsetWidth
- java 面试题
- 关于宽字符和窄字符
- 二手计算机图书转让
- C++程序设计教学材料-2011级
- 我们为什么来到这个世界上?
- Window快捷键简介
- JSCal2使用指南1
- SYBASE 12.5 维护手册 3. 技术专刊
- editable alv(call function)
- 传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A)