我正在使用下面的代碼來存儲char *中的字符串數據。NSString char *與希臘字符
NSString *hotelName = [components[2] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
hotelInfo->hotelName = malloc(sizeof(char) * hotelName.length + 1);
strncpy(hotelInfo->hotelName, [hotelName UTF8String], hotelName.length + 1);
NSLog(@"HOTEL NAME: %s",hotelInfo->hotelName);
問題出在奇怪的希臘字符上。我也試圖用另一種編碼(如NSWindowsCP1253StringEncoding -IT crashes-)
我想即使是:
hotelInfo->hotelName = (const char *)[hotelName cStringUsingEncoding:NSUnicodeStringEncoding];
,但它也產生奇怪的字符。
我錯過了什麼?
編輯: 一些建議之後,我嘗試了以下內容:
if ([hotelName canBeConvertedToEncoding:NSWindowsCP1253StringEncoding]){
const char *cHotelName = (const char *)[hotelName cStringUsingEncoding:NSWindowsCP1253StringEncoding];
int bufSize = strlen(cHotelName) + 1;
if (bufSize >0){
hotelInfo->hotelName = malloc(sizeof(char) * bufSize);
strncpy(hotelInfo->hotelName, [hotelName UTF8String], bufSize);
NSLog(@"HOTEL NAME: %s",hotelInfo->hotelName);
}
}else{
NSLog(@"String cannot be encoded! Sorry! %@",hotelName);
for (NSInteger charIdx=0; charIdx<hotelName.length; charIdx++){
// Do something with character at index charIdx, for example:
char x[hotelName.length];
NSLog(@"%C", [hotelName characterAtIndex:charIdx]);
x[charIdx] = [hotelName characterAtIndex:charIdx];
NSLog(@"%s", x);
if (charIdx == hotelName.length - 1)
hotelInfo->hotelName = x;
}
NSLog(@"HOTEL NAME: %s",hotelInfo->hotelName);
}
,但仍然沒有!
您是否嘗試過使用'characterAtIndex'? Objective-c爲大量這樣的函數提供了大量的函數,從而可以在大約一行代碼中完成整個事情。在iOS應用程序中使用這麼多舊的C,真是奇怪。 (不要誤會我的意思,我愛C) –
是你的問題解決了嗎? – KrishnaCA
@KrishnaCA我編輯了我的問題 – arniotaki