【问题标题】:NSString to const char * convert with Greek charactersNSString 到 const char * 转换为希腊字符
【发布时间】:2012-04-24 20:25:03
【问题描述】:

我正在尝试将包含希腊词的 NSString 转换为 const char。我正在尝试使用用于希腊语言的 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);

【问题讨论】:

  • 在我的字符串中使用字符 π 时,我对该代码没有任何问题。
  • 当我将希腊字符串插入 UItextField 时,我没有问题。我的问题是当我转换为 const char 时,最终的字符串有垃圾!

标签: ios nsstring char cons


【解决方案1】:

您不必使用 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 字符。所以,它真的会显示混乱。

要测试它是否有效,请进行转换,然后重做。如果相同,则不会丢失数据。

const char *cLetter = (const char *)[letter cStringUsingEncoding:NSUnicodeStringEncoding]; 
NSString *original = [NSString stringWithCString:cLetter encoding:NSUnicodeStringEncoding];

【讨论】:

  • 我测试了不同的编码,NSWindowsCP1253Encoding 进行了测试。但我的问题是如何将 NSString 转换为 const char 用于 sql 语句。我有以下内容: NSString *original = [NSString stringWithFormat:@"select * from vehicle where number='ΑΘΗΝΑ'; 和 const char *sqlStatement = (const char *)[original cStringUsingEncoding: NSWindowsCP1253StringEncoding]; 然后我试图(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) 但没有机会!
  • 好的,我已经解决了。它必须是 const char *sqlStatement = [sqlState UTF8String];在执行 sqlite3_prepare_v2 之前。感谢您的回答@Rodrigo。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2012-02-24
  • 2014-05-16
相关资源
最近更新 更多