美文网首页
iOS计算字符串的对应字节数

iOS计算字符串的对应字节数

作者: Mr狮子先生 | 来源:发表于2017-12-27 17:33 被阅读0次

iOS计算字符串的对应字节数

本文展示在iOS下,如何正确的计算输入的字符个数。

常见编码

汉字、中文符号

UTF-8编码下,一个汉字,包括中文符号标点,占3个字节。
GBK、GB2312编码下,是2个字节。

emoji表情

无论是UTF-8,还是GBK、GB2312,emoji表情都是占用4个字节。

iOS的设备编码

iOS的设备,基本上都是使用UTF-8编码,所以一个汉字是3个字节。

现状

通常情况下,数据库的存储,会使用UTF-8编码。
而我们在编程时,会把一个汉字认为是2个字节。

结论

因此,我们需要使用GBK的编码,去判断用户输入的字符个数,以作限制。

1、获取GBK编码

NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

2、使用GBK编码作为 cStringUsingEncoding 方法的编译,来获取字符串的cString首个字符指针。

3、使用 lengthOfBytesUsingEncoding 获取字节长度,然后遍历,由此计算出所有字符长度。

代码示例

将以下代码放入NSString的category

- (NSUInteger)charactorNumber
{
    NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    return [self charactorNumberWithEncoding:encoding];
}

- (NSUInteger)charactorNumberWithEncoding:(NSStringEncoding)encoding
{
    NSUInteger strLength = 0;
    char *p = (char *)[self cStringUsingEncoding:encoding];
    
    NSUInteger lengthOfBytes = [self lengthOfBytesUsingEncoding:encoding];
    for (int i = 0; i < lengthOfBytes; i++) {
        if (*p) {
            p++;
            strLength++;
        }
        else {
            p++;
        }
    }
    return strLength;
}

LXKit - 代码下载地址

LXKit - category文件地址

相关文章

  • iOS计算字符串的对应字节数

    iOS计算字符串的对应字节数 本文展示在iOS下,如何正确的计算输入的字符个数。 常见编码 汉字、中文符号 UTF...

  • Charset(字符集)

    编码:将字符串通过一系列对应规则转化为字节数组的过程解码:将字节数组按照编码相反的规则转化为字符串的过程。 使用C...

  • iOS开发笔记-20170309

    计算字符串 size 在 iOS7 中下面计算字符串 size的方法都标注为 deprecated iOS7以后提...

  • Python字节数组与字符串之间的转换

    字节数组 ->字符串 bytes.decode() 字符串 -> 字节数组 str.encode('utf-8')...

  • 面试题

    sizeof 和strlen的区别 1.首先,sizeof()是用来计算字符串或其他对象所占内存的字节数;char...

  • Java IO流(转换流的字符编码)

    编码:字符串变成字节数组,解码:字节数组变成字符串。String-->byte[];str.getBytes[ch...

  • NSString字符串 - OC

    创建字符串的4种方法 NSString字符串长度计算(length方法) NSString字符串:取出对应位置的字...

  • php记录

    问题 答案 PHP自带的函数strlen()是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节,而...

  • <C++程序设计>内存,结构体,内联函数,Strin

    八进制 前缀0 ,020在计算机中是表示16的整数 浮点型1.0占8个字节 字符串占的字节数 = 字符串长度+1 ...

  • 第一篇笔记(siziof,strlen,_countof的区别待

    sizeof是一个关键字返回对象或类型的长度以字节数为单位,strlen是一个函数计算字符串中字符的个数(计算结果...

网友评论

      本文标题:iOS计算字符串的对应字节数

      本文链接:https://www.haomeiwen.com/subject/vpougxtx.html