IOS上的字符编码
IOS字符编码
字符编码经常能听到的有Unicode、UTF-8、GBK、GB2312、GB18030、BIG5等。这些编码方式都有什么区别呢?
其实这些编码,大体分两类:全球统一编码和各过个语种的独立编码
1.全球统一编码
Unicode是典型的全球统一编码。不管在那个国家,同一个字的unicode字符都是一样的。常用的unicode字符为2个字节,也有4个字节编码。
UTF8是unicode的一种编码方式。对应2字节的unicode,utf8为1字节(英文)或3字节(中文)。实际情况比这复杂,这里只说明常用情况
2.各国独立编码
GBK、GB2312、GB18030都是简体中文的编码。GB2312是GBK的子集,GBK是GB18030的子集。
BIG5是台湾使用的繁体中文编码。
其他非英文国家也有自己的编码,例如日语和韩语。
3. IOS中的应用
ios中可以将NSData做为参数,用来初始化NSString
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
对于常用的编码方式可以简单这样写:
NSString *text =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
可以按住Command键点击NSStringEncoding, 切换到定义处查看
enum {
NSASCIIStringEncoding = , /* 0..127 only */
NSNEXTSTEPStringEncoding = ,
NSJapaneseEUCStringEncoding = ,
NSUTF8StringEncoding = ,
NSISOLatin1StringEncoding = ,
NSSymbolStringEncoding = ,
NSNonLossyASCIIStringEncoding = ,
NSShiftJISStringEncoding = , /* kCFStringEncodingDOSJapanese */
NSISOLatin2StringEncoding = ,
NSUnicodeStringEncoding = ,
NSWindowsCP1251StringEncoding = , /* Cyrillic; same as AdobeStandardCyrillic */
NSWindowsCP1252StringEncoding = , /* WinLatin1 */
NSWindowsCP1253StringEncoding = , /* Greek */
NSWindowsCP1254StringEncoding = , /* Turkish */
NSWindowsCP1250StringEncoding = , /* WinLatin2 */
NSISO2022JPStringEncoding = , /* ISO 2022 Japanese encoding for e-mail */
NSMacOSRomanStringEncoding = ,
NSUTF16StringEncoding = NSUnicodeStringEncoding, /* An alias for NSUnicodeStringEncoding */
NSUTF16BigEndianStringEncoding = 0x90000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */
NSUTF16LittleEndianStringEncoding = 0x94000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */
NSUTF32StringEncoding = 0x8c000100,
NSUTF32BigEndianStringEncoding = 0x98000100, /* NSUTF32StringEncoding encoding with explicit endianness specified */
NSUTF32LittleEndianStringEncoding = 0x9c000100 /* NSUTF32StringEncoding encoding with explicit endianness specified */
};
typedef NSUInteger NSStringEncoding;
对于不常用的编码方式,需要这样用:
NSStringEncoding encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *text = [[NSString alloc] initWithData:data encoding:encode];
枚举CFStringEncodings中定义了很多编码方式。简体中文相关的是这三个
kCFStringEncodingGB_2312_80 = 0x0630,
kCFStringEncodingGBK_95 = 0x0631, /* annex to GB 13000-93; for Windows 95 */
kCFStringEncodingGB_18030_2000 = 0x0632,
IOS上的字符编码的更多相关文章
- Python2与Python3字符编码的区别
目录 字符编码应用之Python(掌握) 执行Python程序的三个阶段 Python2与Python3字符串类型的区别(了解) Python2 str类型 Unicode类型 Python3 字符编 ...
- python2与python3 字符问题以及 字符编码 内容总结
python2与python3默认编码: python2:gbk print( u'上' ) 操作系统也是 gbk python3:unicode p ...
- c/c++ 字符编码与标识符
说明: 对于比较现代的语言来讲字符编码不是个大问题:java就可以使用中文作为变量名称,但对于C/C++来讲却不是这样,由于历史原因,标准和编译器厂商的实现总在不停的变化,相关编码信息到底是如何处理的 ...
- python——字符编码
Unicode 是字符集 UTF-8 是编码规则 Unicode:给每一个字符分配一个唯一的ID(又称码位). 编码规则:将码位转换为字节序列的规则. 1.什么是字符编码:字符翻译成数字,所遵循的标准 ...
- Python2和3字符编码的区别
Python2和3字符编码的区别 一.字符编码应用之Python 1.1 执行Python程序的三个阶段 Python test.py(我再强调一遍,执行test.py的第一步,一定是先将文件内容从硬 ...
- 彻底搞懂Python的字符编码
前言:中文编码问题一直是程序员头疼的问题,而Python2中的字符编码足矣令新手抓狂.本文将尽量用通俗的语言带大家彻底的了解字符编码以及Python2和3中的各种编码问题. 一.什么是字符编码. 要彻 ...
- Unity3d发布的iOS产品中使用GB2312字符编码(CP936)
最近在开发中要用到GB2312字符编码(CP936),在C#代码中便有了如此代码 System.Text.Encoding.GetEncoding() 这在Unity3d 编辑器下运行没有任何问题,打 ...
- 上传XML文件字符编码问题
1.上传的XML文件的空格的字符编码和倒入到数据库的空格的字符编码不是一种编码格式,导致导入到数据库的数据和XML文件的数据不一致的情况,进而使展示到界面上的数据在进行搜索时不能搜索出来.解决办法: ...
- python基础之Day7part2 史上最清晰字符编码理解
二.字符编码 基础知识: 文本编辑器存取文件原理与py执行原理异同: 存/写:进入文本编辑器 写内容 保存后 内存数据刷到硬盘 取/读:进入文本编辑器 找到内容 从硬盘读到内存 notepad把文件内 ...
随机推荐
- Interface Serializable
public interface Serializable Serializability of a class is enabled by the class implementing the ja ...
- Codeforces Round #243 (Div. 2) A~C
题目链接 A. Sereja and Mugs time limit per test:1 secondmemory limit per test:256 megabytesinput:standar ...
- 发现一个可以在线运行JS代码的网站
平时可以在这里玩 http://jsbin.com/
- struts2 request内幕 为什么在struts2用EL表达式可以取值
不知道大家有没有想过这样一个问题:为什么在action中的实例变量,没有使用request.setAttribute()方法将值添加到request范围内,却能在jsp中用EL表达式取出? 众所周知, ...
- 6大排序算法,c#实现
using System; using System.Text; using System.Collections.Generic; namespace ArithmeticPractice { st ...
- 选择Android还是选择JavaEE?
很多同学咨询过同样的一个问题,该问题也是最备受争议的问题,那就是到底是选择Android还是选择JavaEE.下面发表一些本人的看法. Android属于一个特有的Java技术应用,专注于 ...
- QT的QWidget和Delphi的TPanel很像,都是万能的基础控件
都只提供了最基本的功能,实际可以在上面随心所欲的创造新的控件.而自身也已经拥有基础的显示功能,而TCustomControl就不行. 比如,这样使用QWidget,直接就可以显示: void Main ...
- 【转】android资源目录---assets与res/raw区别
blog.csdn.net/hshm20517/article/details/6461890 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASS ...
- 【HDOJ】4343 Interval query
最大不相交集合的数量.思路是dp[i][j]表示已经有i个不相交集合下一个不相交集合的最右边界.离散化后,通过贪心解. /* 4343 */ #include <iostream> #in ...
- [ffmpeg 扩展第三方库编译系列] 关于 mingw32 下编译libcaca
在编译前最好先看一下帮助 ./configure --help 开始编译 ./configure --disable-shared --disable-cxx \ --disable-csharp ...