如何在目标 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 中处理数据库中的特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章