NSString const char *与希腊字符转换

我试图将一个包含希腊字的NSString转换为一个const char。 我想转换string与UTF-8编码这是希腊语,当我logging的字符,它有垃圾。 请在这里一点帮助..

//this is the greek word NSString *letter = textFieldLetter.text; //NSString to const char conversion for the sql query const char *cLetter = (const char *)[letter cStringUsingEncoding:NSUTF8StringEncoding]; //this contains junk! NSLog(@"letter: %s",cLetter); 

你不必使用UTF8,而是使用Unicode( NSUnicodeStringEncoding )。

如果你看到NSStringEncoding会看到这个选项(有更多):

 enum { NSWindowsCP1253StringEncoding = 13, /* Greek */ NSUTF16StringEncoding = NSUnicodeStringEncoding, NSUTF16BigEndianStringEncoding = 0x90000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ NSUTF16LittleEndianStringEncoding = 0x94000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ NSUTF32StringEncoding = 0x8c000100, NSUTF32BigEndianStringEncoding = 0x98000100, /* NSUTF32StringEncoding encoding with explicit endianness specified */ NSUTF32LittleEndianStringEncoding = 0x9c000100 /* NSUTF32StringEncoding encoding with explicit endianness specified */ }; typedef NSUInteger NSStringEncoding; 

你可以看到一个特定的希腊语言: NSWindowsCP1253StringEncoding

如果不行,你可以尝试使用其他的UTF16或UTF32。 但我认为Unicode为你工作。

– 编辑

请记住NSLog(@"%s",string); 不能解码一个Unicode字符。 所以,它会真的显示混乱。

要testing它是否工作,请执行转换,然后重做。 如果是一样的,那么你不会丢失数据。

 const char *cLetter = (const char *)[letter cStringUsingEncoding:NSUnicodeStringEncoding]; NSString *original = [NSString stringWithCString:cLetter encoding:NSUnicodeStringEncoding]; 
Interesting Posts