0

我正在尝试将包含希腊词的 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);
4

1 回答 1

0

您不必使用 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];
于 2012-04-26T00:34:04.450 回答