我想转换包含一个希腊字,以一个const char一个NSString。 我试图用UTF-8编码,这是希腊的语言,当我登录炭出来,它有垃圾在它的字符串转换。 请在这里一点点帮助..
//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);
您不必使用UTF-8,而不是使用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;
你可以看到一个特定的希腊lenguage: NSWindowsCP1253StringEncoding
如果不工作,你可以尝试使用其他UTF16或UTF32。 不过,我想你Unicode的工作。
- 编辑
以记住NSLog(@"%s",string);
不能解码Unicode字符。 因此,它才会真正显示混乱。
为了测试它是否正常工作,执行转换和重做。 如果是相同的,这样你就不会丢失数据。
const char *cLetter = (const char *)[letter cStringUsingEncoding:NSUnicodeStringEncoding];
NSString *original = [NSString stringWithCString:cLetter encoding:NSUnicodeStringEncoding];