以字节为单位获取 UTF-8 字符串长度的最佳方法?

use*_*109 1 objective-c utf-8 ios

我想从 NSString 获取 cString。
所以我们使用了 c?String?Using?Encoding:? 方法。
但是,返回值c?String?Using?Encoding:? 方法不保证。
(Apple 的文档:返回的 C 字符串保证仅在接收器被释放之前有效。)

所以 Apple 推荐 get?CString:?max?Length:?encoding: 方法。
我想将确切的长度传递给 maxLength。

示例 1)

NSString *tmp = @"???" // cString 9bytes
char *buffer = new tmp[9 + 1];
[tmp getCString:buffer maxLength:9+1 encoding:NSUTF8String?Encoding];
Run Code Online (Sandbox Code Playgroud)

例 2)

NSString *tmp = @"???123" // cString 12bytes
char *buffer = new tmp[12 + 1];
[tmp getCString:buffer maxLength:12+1 encoding:NSUTF8String?Encoding];
Run Code Online (Sandbox Code Playgroud)

有没有办法知道上面例子中 9 和 12 的长度?

Rob*_*ier 5

// Add one because this doesn't include the NULL
NSUInteger maxLength = [string maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1;
Run Code Online (Sandbox Code Playgroud)

  • lengthOfBytesUsingEncoding: 更精确——它将获得字符串的实际长度(当然,您仍然需要为 NULL 添加 1)。maximumLength 返回很快,但会超过 NSUTF8StringEncoding 的必要长度。 (2认同)