在Objective-C中处理MySQL中的特殊字母
我从数据库中检索名称,并将其名和姓存储在NSMutableDictionary中,然后将其存储在NSMutableArray中。在数据库中,我有一些具有特殊字符的名称,例如 当我把名字存储在变量中时,它会存储,这会使我的程序崩溃 我不想限制用户输入,所以我必须保留这些字符。但是,有没有办法在不获取输出的情况下检索这些带有此类字符的名称在Objective-C中处理MySQL中的特殊字母,mysql,objective-c,special-characters,Mysql,Objective C,Special Characters,我从数据库中检索名称,并将其名和姓存储在NSMutableDictionary中,然后将其存储在NSMutableArray中。在数据库中,我有一些具有特殊字符的名称,例如 当我把名字存储在变量中时,它会存储,这会使我的程序崩溃 我不想限制用户输入,所以我必须保留这些字符。但是,有没有办法在不获取输出的情况下检索这些带有此类字符的名称 ConDAO*con=[[ConDAO alloc]init] for (int i =0; i< [resultSet count]-1; ++i)
ConDAO*con=[[ConDAO alloc]init]代码>
for (int i =0; i< [resultSet count]-1; ++i)
{
NSMutableDictionary *temp = (NSMutableDictionary *) [resultSet objectAtIndex:i];
...
}
-(NSMutableArray *) executeMySqlCommand: (NSString *) mysqlCommand{
LoginData* loginData=[self dataObject];
NSString *post =[NSString stringWithFormat:@"username=%@&password=%@&mysqlCommand=%@",
loginData.loginName, loginData.loginPassword, mysqlCommand ];
NSString *hostStr = @myIP;
hostStr = [hostStr stringByAppendingString:post];
NSString *encodeURL =[hostStr stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
NSData *dataURL = [NSData dataWithContentsOfURL: [ NSURL URLWithString: encodeURL ]];
NSString *serverOutput = [[NSString alloc] initWithData:dataURL encoding: NSASCIIStringEncoding];
if ([serverOutput length]<=0) return nil;
NSError * error;
NSMutableArray *data = [NSJSONSerialization JSONObjectWithData:dataURL options:0 error:&error];
return data;
}
NSMutableArray*resultSet=[con executeMySqlCommand:[nsstringwithformat:(此处为长查询)]代码>
NSMutableDictionary*endList=[[NSMutableDictionary alloc]init];
[endList setObject:@“forKey:@“姓氏”];
[endList setObject:@“forKey:@“name”]代码>
resultSet=(NSMutableArray*)[resultSet arrayByAddingObject:endList]代码>
for (int i =0; i< [resultSet count]-1; ++i)
{
NSMutableDictionary *temp = (NSMutableDictionary *) [resultSet objectAtIndex:i];
...
}
-(NSMutableArray *) executeMySqlCommand: (NSString *) mysqlCommand{
LoginData* loginData=[self dataObject];
NSString *post =[NSString stringWithFormat:@"username=%@&password=%@&mysqlCommand=%@",
loginData.loginName, loginData.loginPassword, mysqlCommand ];
NSString *hostStr = @myIP;
hostStr = [hostStr stringByAppendingString:post];
NSString *encodeURL =[hostStr stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
NSData *dataURL = [NSData dataWithContentsOfURL: [ NSURL URLWithString: encodeURL ]];
NSString *serverOutput = [[NSString alloc] initWithData:dataURL encoding: NSASCIIStringEncoding];
if ([serverOutput length]<=0) return nil;
NSError * error;
NSMutableArray *data = [NSJSONSerialization JSONObjectWithData:dataURL options:0 error:&error];
return data;
}
for(int i=0;i<[resultSet count]-1;++i)
{
NSMutableDictionary*temp=(NSMutableDictionary*)[resultSet objectAtIndex:i];
...
}
-(NSMutableArray*)executeMySqlCommand:(NSString*)mysqlCommand{
LoginData*LoginData=[自数据对象];
NSString*post=[NSString stringWithFormat:@“用户名=%@&密码=%@&mysqlCommand=%@”,
loginda.loginName、loginda.loginPassword、mysqlCommand];
NSString*hostStr=@myIP;
hostStr=[hostStr stringByAppendingString:post];
NSString*encodeURL=[HostStringByAddingPercentescapesusingEncoding:NSASCIIStringEncoding];
NSData*dataURL=[NSData dataWithContentsOfURL:[NSURL URLWithString:encodeURL]];
NSString*serverOutput=[[NSString alloc]initWithData:dataURL编码:NSASCIIStringEncoding];
如果([serverOutput length]您似乎使用了一种奇怪的服务器体系结构,您的查询将通过web服务器进入数据库。您假设返回的字符串编码为ASCII,如下所示:
NSString *serverOutput = [[NSString alloc] initWithData:dataURL
encoding:NSASCIIStringEncoding];
很明显,您不知道正确的编码应该是什么。您奇怪的服务器体系结构使问题更加复杂,因为web服务器和数据库本身之间可能存在编码问题
这个问题的正确解决方案是使用MySQL客户端库来执行查询,因为在不同的存储和表示文本编码之间进行转换对于任何数据库来说都是必不可少的
你不会说你是在使用iOS还是OSX
如果使用OSX,您可能可以从以下位置安装:
- 然后访问libmysqlclient中的官方C API
它看起来像一个不需要安装MySQL的C++包装器(但是它确实依赖于Boost,因此可能不会更快地构建)。
如果是iOS,那么这可能就涵盖了它。您似乎使用了一种奇怪的服务器体系结构,您的查询将通过web服务器进入数据库。您假设返回的字符串编码为ASCII,如下所示:
NSString *serverOutput = [[NSString alloc] initWithData:dataURL
encoding:NSASCIIStringEncoding];
很明显,您不知道正确的编码应该是什么。您奇怪的服务器体系结构使问题更加复杂,因为web服务器和数据库本身之间可能存在编码问题
这个问题的正确解决方案是使用MySQL客户端库来执行查询,因为在不同的存储和表示文本编码之间进行转换对于任何数据库来说都是必不可少的
你不会说你是在使用iOS还是OSX
如果使用OSX,您可能可以从以下位置安装:
- 然后访问libmysqlclient中的官方C API
它看起来像一个不需要安装MySQL的C++包装器(但是它确实依赖于Boost,因此可能不会更快地构建)。
如果是iOS,那么这可能就涵盖了它。这实际上是使用.php的问题。使用的编码没有覆盖特殊字符,所以当它调用DB时,我不得不在.php内部使用UTF8编码。这实际上是使用.php的问题。使用的编码没有覆盖特殊字符,所以当.php调用DB时,我不得不在其内部使用UTF8编码。如何使用NSString
存储字符串?[currentStudent setObject:[temp objectForKey:@“name”]forKey:@“name”];其中temp是一行选择查询。这并不能回答问题。从[temp objectForKey:@“name”返回什么类
?K,编辑了问题,谢谢。i<[resultSet count]-1
看起来可疑。而且看起来您通过web服务器暴露了数据库访问权限?这不是一个好主意……如何使用NSString
存储字符串?[currentStudent setObject:[temp objectForKey:@“name”]forKey:@“name”];其中temp是Select查询的一行。这没有回答问题。从[temp objectForKey:@“name”]
返回什么类?K,编辑了问题,谢谢。i<[resultSet count]-1
看起来可疑。而且看起来您通过web服务器公开了数据库访问权限?这不是一个好主意。。。