【问题标题】:How to handle Windows-1252 characters in iOS?如何在 iOS 中处理 Windows-1252 字符?
【发布时间】:2012-07-16 03:50:24
【问题描述】:

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

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

我在 PHP 中使用原始 mysql DB 进行了测试,字符显示很好,只要我添加了 content-type 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 和 ë 转换为 ë。 另一方面,其他字符似乎不起作用。

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

【问题讨论】:

  • 你为什么要在客户端这样做而不是在服务器上修复数据?
  • 数据库主要用于网站,我不是所有者。
  • 如果你不能确定数据的格式,可以在你的问题中添加一些十六进制格式的字符串,即“08AB7BCD...”,让别人来破解。

标签: mysql objective-c ios sqlite


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多