iOS計算文字列の対応バイト数

1567 ワード

iOS計算文字列の対応バイト数


この文書では、iOSで入力された文字数を正しく計算する方法を示します.

一般的なエンコーディング


漢字、中国語記号


UTF-8符号化では、中国語記号の句読点を含む漢字が3バイトを占める.GBK、GB 2312符号化では、2バイトである.

Emoji表情


UTF-8でも、GBK、GB 2312でも、emojiの表情は4バイトを占めています.

iOSのデバイスコード


iOSのデバイスは、基本的にUTF-8コードを使用しているので、漢字1文字は3バイトです.

現状


通常、データベースのストレージでは、UTF-8符号化が使用されます.プログラミングでは、1つの漢字を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ファイルアドレス