简体   繁体   English

NSString转换为const char *用希腊字符转换

[英]NSString to const char * convert with Greek characters

I'm trying to convert an NSString which contains a greek word to a const char. 我正在尝试将包含希腊语单词的NSString转换为const char。 I'm trying to convert the string with UTF-8 encoding which is for greek language and when i'm logging the char out, it has junk in it. 我正在尝试使用适用于希腊语的UTF-8编码转换字符串,当我注销char时,其中有垃圾。 Please a little help here.. 请在这里一点帮助。

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

You don't have to use UTF8, instead use Unicode ( NSUnicodeStringEncoding ). 您不必使用UTF8,而应使用Unicode( NSUnicodeStringEncoding )。

If you see the NSStringEncoding will see this options (have more): 如果看到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;

You can see a specific Greek lenguage: NSWindowsCP1253StringEncoding 您可以看到特定的希腊语语言: NSWindowsCP1253StringEncoding

If is don't work, you can try to use other UTF16 or UTF32. 如果不起作用,则可以尝试使用其他UTF16或UTF32。 But I think Unicode work for you. 但是我认为Unicode对您有用。

-- edit -编辑

Take in mind that NSLog(@"%s",string); 请记住, NSLog(@"%s",string); can not decode a unicode character. 无法解码unicode字符。 So, it will really show the mess. 因此,它将真正显示出混乱。

To test if it work, do the conversion, and redo it. 要测试它是否有效,请进行转换,然后重做。 If is the same, so you don't lost data. 如果相同,那么您就不会丢失数据。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM