您不必使用 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];