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ファイルアドレス
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
- (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;
}