2012-04-24 110 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