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];