如何在iOS中处理Windows-1252字符?

时间:2012-07-17 08:38:28

标签: mysql objective-c ios sqlite

我已经完成了我的研究,但似乎没有找到明确的答案。

我的问题如下: 我有一个mysql数据库,我将其转换(在脚本的帮助下)到sqlite数据库。 在原始数据库(以及sqlite)中,我发现了一些包含以下字符的条目: â€,â€,Ã,,Ã,......(Windows-1252?)还有一些HTML代码。

我已经在PHP中使用原始的mysql数据库进行了测试,并且字符显示很好,只要我添加了内容类型utf-8,否则我得到了相同的奇数字符“,” ™,ë,Ã。。

我在iOS中尝试了以下内容:

[[NSString alloc] initWithCString:(const char *) sqlite3_column_text(rs.statement.statement, 4) encoding:NSStringEncodingConversionExternalRepresentation];

[NSString stringWithUTF8String:[[[rs stringForColumn:@"tekst"] stringByDecodingHTMLEntities] cStringUsingEncoding:NSStringEncodingConversionExternalRepresentation]];
  • NSStringEncodingConversionExternalRepresentation
  • NSUTF8StringEncoding
  • NSISO2022JPStringEncoding
  • NSStringEncodingConversionAllowLossy
  • NSWindowsCP1252StringEncoding
  • ...

然后我发现了这个: MWFeedParser NSString+HTML

通过这些类,我能够将HTML和ë转换为ë。 另一方面,其他角色似乎没有用。

那么,我该如何转换/编码/解码这些字符才能正常显示?

1 个答案:

答案 0 :(得分:1)

您是否首先尝试修复HTML编码?我想它最后应用了。如果您可以获得一些示例字符串,请编写一个快速而肮脏的测试应用程序,并尝试确定编码的确切方式。

1)您可以尝试此列表中的其他编码:

NSISOLatin1StringEncoding = 5,
NSISOLatin2StringEncoding = 9,
NSWindowsCP1251StringEncoding = 11,
NSWindowsCP1252StringEncoding = 12,
NSWindowsCP1253StringEncoding = 13,
NSWindowsCP1254StringEncoding = 14,
NSWindowsCP1250StringEncoding = 15,

2)如果Apple没有提供正确的编码,但它是已知的编码,那么你可以使用iconv(),它可以在mac和iOS上使用。它几乎可以将每个字符串编码转换为几乎任何其他字符串 - 它使用起来有点复杂,但你会在网上找到很多例子。