2012-04-24 113 views
0

我试图将包含希腊字的NSString转换为const char。我试图将字符串转换为UTF-8编码,这是希腊语的语言,当我将字符记录下来时,它已经是垃圾了。请在这里一点点帮助..NSString const char *用希腊字符转换

//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); 
+0

在我的字符串中使用字符'π'时,我对该代码没有任何问题。 – 2012-04-24 20:31:28

+0

当我插入希腊字符串到UItextField时,我没有问题。我的问题是当我正在转换为const char时,最后的字符串有垃圾! – 2012-04-25 15:42:04

回答

0

您没有使用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]; 
+0

我测试了不同的编码和NSWindowsCP1253Encoding进行测试。但我的问题是如何将一个NSString转换为一个SQL语句的常量字符。我有以下内容:NSString * original = [NSString stringWithFormat:@“select * from vehicles where number ='ΑΘΗΝΑ'; and const char * sqlStatement =(const char *)[original cStringUsingEncoding:NSWindowsCP1253StringEncoding];然后我试图(sqlite3_prepare_v2(database,sqlStatement,-1,&compiledStatement,NULL)== SQLITE_OK)但没有机会! – 2012-04-26 18:22:30

+0

好的,我已经解决了它,它必须是const char * sqlStatement = [sqlState UTF8String];在执行sqlite3_prepare_v2之前。谢谢为你的回答@Rodrigo。 – 2012-04-26 18:42:56