Objective-C unicode到utf8

Objective-C unicode到utf8,objective-c,unicode,encoding,utf-8,air-native-extension,Objective C,Unicode,Encoding,Utf 8,Air Native Extension,我有一个objective-c中的NSString,使用unicode编码,我想将其转换为UTF8。 看起来很简单,但我找不到一个简单的方法,而且网上也没有那么多信息 基本上,我使用FRE将对象发送到AS3,我的编码有问题。这个问题与AS3端没有出现的特殊字符有关 编辑: 这是我的主要问题,我在NSString Stanisław中有这个名字。这是NSString中扩展方法的结果: NSLog(@"%@, %d, %s", self, [self length], [self UTF8Strin

我有一个objective-c中的NSString,使用unicode编码,我想将其转换为UTF8。 看起来很简单,但我找不到一个简单的方法,而且网上也没有那么多信息

基本上,我使用FRE将对象发送到AS3,我的编码有问题。这个问题与AS3端没有出现的特殊字符有关

编辑:

这是我的主要问题,我在NSString Stanisław中有这个名字。这是NSString中扩展方法的结果:

NSLog(@"%@, %d, %s", self, [self length], [self UTF8String]);

//Result: Stanisław, 9, Stanis≈Çaw
因此,当我将UTF8String移动到AS3时,我获得了一个不同的名称(基本上结果是Stanisła(没有最后一个字母)

Im用于将字符串转换为FRE对象的方法是:

uint32_t st = FRENewObjectFromUTF8([self length], (const uint8_t *)[self UTF8String], &rv);

您可以通过发送
-UTF8String
消息来获取任何NSString的UTF8表示。

您可以通过发送
-UTF8String
消息来获取任何NSString的UTF8表示。

您可以通过发送
-UTF8String
消息来获取任何NSString的UTF8表示。

您可以获取UTF8Re通过发送
-UTF8String
消息来表示任何NSString。

如果您有
NSString
,只需执行以下操作即可

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
或者,如果您需要一个
常量字符*
(这不太可能),您可以使用:

const char *anotherString = [string UTF8String];

现在,如果这个
NSString
是您最初以
NSData
的形式从服务器中检索到的内容,您可以将它从网络请求中获得的
NSData
转换为一个类似以下内容的字符串:

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

但是,在这种情况下,您必须确认服务器使用“unicode编码”这一事实的含义。这是不明确的,您必须确认它是UTF8(我在上面使用的),还是UTF16(如果是UTF16,那么是哪一个,例如
NSUTF16StringEncoding
NSUTF16LittleEndiTransingEncoding
或…)或者随便什么。

如果你有一个
NSString
,你可以这样做

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
或者,如果您需要一个
常量字符*
(这不太可能),您可以使用:

const char *anotherString = [string UTF8String];

现在,如果这个
NSString
是您最初以
NSData
的形式从服务器中检索到的内容,您可以将它从网络请求中获得的
NSData
转换为一个类似以下内容的字符串:

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

但是,在这种情况下,您必须确认服务器使用“unicode编码”这一事实的含义。这是不明确的,您必须确认它是UTF8(我在上面使用的),还是UTF16(如果是UTF16,那么是哪一个,例如
NSUTF16StringEncoding
NSUTF16LittleEndiTransingEncoding
或…)或者随便什么。

如果你有一个
NSString
,你可以这样做

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
或者,如果您需要一个
常量字符*
(这不太可能),您可以使用:

const char *anotherString = [string UTF8String];

现在,如果这个
NSString
是您最初以
NSData
的形式从服务器中检索到的内容,您可以将它从网络请求中获得的
NSData
转换为一个类似以下内容的字符串:

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

但是,在这种情况下,您必须确认服务器使用“unicode编码”这一事实的含义。这是不明确的,您必须确认它是UTF8(我在上面使用的),还是UTF16(如果是UTF16,那么是哪一个,例如
NSUTF16StringEncoding
NSUTF16LittleEndiTransingEncoding
或…)或者随便什么。

如果你有一个
NSString
,你可以这样做

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
或者,如果您需要一个
常量字符*
(这不太可能),您可以使用:

const char *anotherString = [string UTF8String];

现在,如果这个
NSString
是您最初以
NSData
的形式从服务器中检索到的内容,您可以将它从网络请求中获得的
NSData
转换为一个类似以下内容的字符串:

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
但是,在这种情况下,您必须确认服务器使用“unicode编码”这一事实的含义。这是不明确的,您必须确认它是UTF8(我在上面使用的),还是UTF16(如果是UTF16,那么是哪一个,例如
NSUTF16StringEncoding
NSUTF16LittleEndiTransingEncoding
或…)或者别的什么。

这个问题

uint32_t st = FRENewObjectFromUTF8([self length], (const uint8_t *)[self UTF8String], &rv);
是不是
[self length]
是字符串中Unicode字符的数量,而不是
[self UTF8String]
中的UTF-8字节数

在您的例子中,“Stanisław”具有9Unicode字符,这些字符被转换为10UTF-8字节。 您的代码只发送前9个字节,这是您需要的“缩短” 观察到

因此,您应该将代码替换为

const char *utf8 = [self UTF8String];
uint32_t st = FRENewObjectFromUTF8(strlen(utf8), (const uint8_t *)utf8, &rv);
中的问题

uint32_t st = FRENewObjectFromUTF8([self length], (const uint8_t *)[self UTF8String], &rv);
是不是
[self length]
是字符串中Unicode字符的数量,而不是
[self UTF8String]
中的UTF-8字节数

在您的例子中,“Stanisław”具有9Unicode字符,这些字符被转换为10UTF-8字节。 您的代码只发送前9个字节,这是您需要的“缩短” 观察到

因此,您应该将代码替换为

const char *utf8 = [self UTF8String];
uint32_t st = FRENewObjectFromUTF8(strlen(utf8), (const uint8_t *)utf8, &rv);
中的问题

uint32_t st = FRENewObjectFromUTF8([self length], (const uint8_t *)[self UTF8String], &rv);
是不是
[self length]
是字符串中Unicode字符的数量,而不是
[self UTF8String]
中的UTF-8字节数

在您的例子中,“Stanisław”具有9Unicode字符,这些字符被转换为10UTF-8字节。 您的代码只发送前9个字节,这是您需要的“缩短” 观察到

因此,您应该将代码替换为

const char *utf8 = [self UTF8String];
uint32_t st = FRENewObjectFromUTF8(strlen(utf8), (const uint8_t *)utf8, &rv);
中的问题

uint32_t st = FRENewObjectFromUTF8([self length], (const uint8_t *)[self UTF8String], &rv);
是不是
[self length]
是字符串中Unicode字符的数量,而不是
[self UTF8String]
中的UTF-8字节数

在您的例子中,“Stanisław”具有9Unicode字符,这些字符被转换为10UTF-8字节。 您的代码只发送前9个字节,即