如何在目标 c 中处理数据库中的特殊字符?

Posted

技术标签:

【中文标题】如何在目标 c 中处理数据库中的特殊字符?【英文标题】:How to handle special characters from the database in objective c? 【发布时间】:2014-01-05 03:44:43 【问题描述】:

我在 sqlite 数据库tableview 单元格中显示数据。

数据来自xml解析匈牙利语

数据很好地插入到数据库中(即带有特殊字符)。但是在tableview中取显示的时候,显示为特殊字符,如下图;

编辑:

我已使用以下方法在数据库中转换和插入数据:

 NSData *dataTitle = [articleElements.Title dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

 NSString * stringTitle = [[NSString alloc] initWithData:dataTitle encoding:NSUTF8StringEncoding];

所以在数据库中它是- “Kosaras vereség hazai pályán”

但在从数组中的数据库中取回时,是-"Kosaras veres√©g hazaip√°ly√°n"

我在取货的时候试过这样-

NSData *data = [titleLabel.text dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"data = %@", str);

NSString *name2 = [NSString
                   stringWithCString:[str cStringUsingEncoding:NSUTF8StringEncoding]
                   encoding:NSNonLossyASCIIStringEncoding];
NSLog(@"name2 = %@", name2);

但未能成功。

我已经搜索了很多,但无法找到解决方案。

我该怎么做?

请帮帮我。

谢谢..

【问题讨论】:

你不能像这样将 ASCII 转换为 UTF8。可能有一些方法,但我建议您在数据库中使用 UTF8,这也可以减少您将来遇到的问题。 @boreas 感谢您的回复。但是你能告诉我如何在数据库中做到这一点吗? 对我来说,我使用准备好的数据库。如果您使用的是在运行时生成的数据库,也许您可​​以参考回答如何使用代码执行此操作。 @boreas 不,我没有在运行时使用 sqlite 管理器创建数据库文件 (.sqlite)。 但您提到它来自 xml 解析,在这种情况下,只需确保源具有正确的编码。我知道一些提供编码传输的文本编辑器,在它进入数据库之前确保它是 utf8。 【参考方案1】:

这与你的character and string encoding有关。

现在您的代码中已将编码声明为“NSNonLossyASCIIStringEncoding”。

您想要的编码对应的 CFString 是"kCFStringEncodingISOLatin10"。

当我查看NSString.h 时,我看到了这条评论:

/* 请注意,除了下面明确列出的值之外, NSStringEncoding 支持 CFString 提供的编码。看 CFStringEncodingExt.h 获取这些编码的列表。见 CFString.h 对于在 NSStringEncoding 和 CFString 编码。 */

所以你只需要在 CFStringEncoding 和 NSStringEncoding 之间进行转换。

【讨论】:

感谢您的回复。我没有指定像 **"NSNonLossyASCIIStringEncoding" ** 之类的任何编码,我只是尝试转换来自数组中的数据库的数据。

以上是关于如何在目标 c 中处理数据库中的特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

处理 C 中的特殊字符(UTF-8 编码)

oracle数据库插入特殊字符

sql中如何判断字符串中含有特殊字符

如何处理JSON中的特殊字符

db2数据库怎么查询数据中含有特殊字符的

iOS Json解析中特殊字符串('\\')处理