gpt4 book ai didi

c - Objective-C UTF-8 和 UTF-16 字符串(以字节表示)的差异

转载 作者:行者123 更新时间:2023-11-30 14:27:18 27 4
gpt4 key购买 nike

我正在尝试将 NSString 转换为字节数组,然后再转换回 NSString。我尝试过 NSUnicodeEncoding 和 NSUTF8StringEncoding。我的问题是,当我迭代字节数组时,我看到不同的数据

此代码中唯一的更改是我将 NSUTF8StringEncoding 更改为 NSUnicodeEncoding,并添加 dataLength += 2,以便它考虑 BOM。

NSString *message = @"testing";
NSUInteger dataLength = [message lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
void *byteData = malloc( dataLength );
NSRange range = NSMakeRange(0, [message length]);
BOOL result = [message getBytes:byteData maxLength:dataLength usedLength:&actualLength encoding:NSUTF8StringEncoding options:0 range:range remainingRange:&remain];
for( NSUInteger x = 0; x < dataLength; x++ )
{
NSLog( @"byte data: %s", (char *)byteData);
int t = (int)*(char *)byteData;
byteData++;
}

区别在于 NSLog :作为 NSUTF8StringEncoding 我看到

  • 测试`
  • 测试`
  • 蜇`
  • 婷`
  • ...

作为 NSUnicodeEncoding 我看到

  • t
  • e
  • ...

int t 值对于给定的字符是正确的,但我不明白为什么 byteData 如此不同。我希望它们都像 NSUnicodeEncoding 一样工作。

最佳答案

在UTF8中,字母F由单个F字节表示。字符串“FU”由 ASCII F 字节后跟 ASCII U 字节表示。在 Unicode(如此处所用)中,每个字符占用两个字节。标准 ASCII 字符前面有一个零字节。

目前尚不清楚为什么您看到的行为与您所期望的不完全一样。在UTF-8中,标准ASCII字符占用一个字节。在你的Unicode编码中,占据两个。所以它肯定不会完全一样。

关于c - Objective-C UTF-8 和 UTF-16 字符串(以字节表示)的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8027530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com