Iphone SQLite MYSQL字符编码

Iphone SQLite MYSQL字符编码,iphone,sqlite,nsstring,Iphone,Sqlite,Nsstring,我有一个奇怪的情况,下面的代码可以工作,但是XCode警告它不推荐使用 NSString *col1 = [NSString stringWithCString:(char *)sqlite3_column_text(compiledStatement, 0)]; 然而,由于这是不推荐使用的方法,如果我设置了编码,字符串就会出错!我已经尝试了所有的编码,但没有工作 NSString *col1 = [NSString stringWithCString:(char *)sqlite3_colu

我有一个奇怪的情况,下面的代码可以工作,但是XCode警告它不推荐使用

NSString *col1 = [NSString stringWithCString:(char *)sqlite3_column_text(compiledStatement, 0)];
然而,由于这是不推荐使用的方法,如果我设置了编码,字符串就会出错!我已经尝试了所有的编码,但没有工作

NSString *col1 = [NSString stringWithCString:(char *)sqlite3_column_text(compiledStatement, 0) encoding:NSASCIIStringEncoding];
试试看 NSString*col1=[NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement,0)]

如果您的数据库使用utf8编码,请尝试 NSString*col1=[NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement,0)]


如果您的数据库使用utf8编码,我本以为satire的建议会起作用,但下面是我使用的Cocoa版本:

如果您正在处理utf16

int len = sqlite3_column_bytes16(compiledStatement, col) / 2;
unichar *chars = (unichar*)sqlite3_column_text16(compiledStatement, col);
NSString *str = [NSString stringWithCharacters:chars length:len];
如果您使用的是utf8

int len = sqlite3_column_bytes(compiledStatement, col);
char *chars = (char*)sqlite3_column_text(compiledStatement, col);
NSString *str = [NSString stringWithUTF8String:chars length:len];

我本以为讽刺的建议会奏效,但以下是我使用的可可版本:

如果您正在处理utf16

int len = sqlite3_column_bytes16(compiledStatement, col) / 2;
unichar *chars = (unichar*)sqlite3_column_text16(compiledStatement, col);
NSString *str = [NSString stringWithCharacters:chars length:len];
如果您使用的是utf8

int len = sqlite3_column_bytes(compiledStatement, col);
char *chars = (char*)sqlite3_column_text(compiledStatement, col);
NSString *str = [NSString stringWithUTF8String:chars length:len];

首先检查数据库中的条目是否包含相同的罗马单词

NSString*strtemp=[NSString stringWithCString:(char*)sqlite3_column_text(compiledStatement,0)];
strtemp=[strtemp stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding]


NSMacOSRomanStringEncoding肯定会起作用。我面临同样的问题。

首先检查数据库中的条目是否包含相同的罗马单词

NSString*strtemp=[NSString stringWithCString:(char*)sqlite3_column_text(compiledStatement,0)];
strtemp=[strtemp stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding]


NSMacOSRomanStringEncoding肯定会起作用。我也面临同样的问题。

试试这个,它对我的UTF8编码有效

char *chars = (char*)sqlite3_column_text(compiledStatement, col);
NSString *str = [NSString stringWithCString:chars encoding:NSUTF8StringEncoding];

试试这个,它适用于UTF8编码

char *chars = (char*)sqlite3_column_text(compiledStatement, col);
NSString *str = [NSString stringWithCString:chars encoding:NSUTF8StringEncoding];

恐怕不行,这会在注销时将任何带有特殊字符的内容返回为(null)。如何检查数据库编码?管理SQLite表的简单工具是一个名为SQLite Manager的javascript Firefox插件,您可以使用它从应用程序包打开数据库。要检查数据库编码,请参阅DBSettings选项卡。使用
printf(“%s”,(char*)sqlite3_column_text(compiledStatement,0))
要查看从DateBase返回的char值printf在前几个entriesFraid not之后停止,则在NSLogging退出时,会将任何带有特殊字符的内容返回为(null)。如何检查数据库编码?管理SQLite表的简单工具是一个名为SQLite Manager的javascript Firefox插件,您可以使用它从应用程序包打开数据库。要检查数据库编码,请参阅DBSettings选项卡。使用
printf(“%s”,(char*)sqlite3_column_text(compiledStatement,0))
要查看从DateBase返回的char值,printf在前几个条目之后停止