我需要将NSData从文件转换为NSString.怎么做?
我正在运行Xcode,我想转出一个NSData*.有问题的变量是缓冲区.有没有办法通过UI或GDB调试器执行此操作?
编辑
我把笔记移到答案中了.
NSData* jsonDataToSendTheServer;
NSDictionary *setUser = [NSDictionary
dictionaryWithObjectsAndKeys:[@"u" stringByAppendingString:my.id],@"id",
@"GET_USER_INFO",@"command",
@"",@"value",
nil];
NSLog(@"%@", jsonDataToSendTheServer);
Run Code Online (Sandbox Code Playgroud)
这是我的代码.当我运行上面的代码时,我得到了这个打印
<7b226964 223a2275 35383738 37373334 31222c22 636f6d6d 616e6422 3a224745 545f5553 45525f49 4e464f22 2c227661 6c756522 3a22227d>
Run Code Online (Sandbox Code Playgroud)
我不知道我是否可以创建一个json.
我怎样才能解决这个问题?
我正在为Lion开发一个应用程序,我想要做的是打开.webarchive文件,修改DOM的片段,然后将修改后的DOM写出到同一个文件中.
到目前为止,这是我的代码.它打开webarchive,修改它,然后将其保存回文件.
NSString *archivePath = @"/Users/tigger/Library/Mail/V2/MailData/Signatures/1216DD8D-C7E2-4DE1-9FCD-0A9A3412C788.webarchive";
NSData *plistData = [NSData dataWithContentsOfFile:archivePath];
NSString *error;
NSPropertyListFormat format;
NSMutableDictionary *plist;
plist = (NSMutableDictionary *)[NSPropertyListSerialization propertyListFromData:plistData
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&error];
if(!plist){
printf("no plist");
[error release];
}else{
NSString *s = [NSString stringWithUTF8String:[[[plist objectForKey:@"WebMainResource"] objectForKey:@"WebResourceData"] bytes]];
NSString *new = [s stringByReplacingOccurrencesOfString:@"</body>" withString:@"hey there!</body>"];
[[plist objectForKey:@"WebMainResource"] setObject:new forKey:@"WebResourceData"];
printf("Archive: %s", [[plist description] UTF8String]);
NSData *data = [NSPropertyListSerialization dataFromPropertyList:plist format:NSPropertyListBinaryFormat_v1_0 errorDescription:nil];
[data writeToURL:[NSURL fileURLWithPath:@"/Users/tigger/Library/Mail/V2/MailData/Signatures/test.webarchive"] atomically:YES];
}
Run Code Online (Sandbox Code Playgroud)
问题是生成的webarchive无效.原件看起来像这样:
bplist00—_WebMainResource’
_WebResourceTextEncodingName_WebResourceFrameName^WebResourceURL_WebResourceData_WebResourceMIMETypeUUTF-8PUdata:O<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: …
Run Code Online (Sandbox Code Playgroud) 我正在使用NSXMLParser从url解析xml(我的代码与此处的代码几乎完全相同)
一些元素包含特殊字符,如"á",这使得一个单词很可能被分成两个(á和ndre).
这是我的loadXMLByURL
-(id) loadXMLByURL:(NSString *)urlString{
tickets = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;}
Run Code Online (Sandbox Code Playgroud)
我很确定这是因为没有设置编码(我认为它需要是NSUTF8StringEncoding)但我不知道在哪里/如何应用它.
[更新]我的其余代码......
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"ticket"])
{
currentTicket = [Ticket alloc];
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"name"])
{
currentTicket.name = currentNodeContent;
} …
Run Code Online (Sandbox Code Playgroud) 为了将String
实例转换为Data
Swift中的实例,您可以使用data(using:allowLossyConversion:)
它返回一个可选Data
实例.
nil
如果编码是UTF-8(String.Encoding.utf8
),这个函数的返回值是否可以?
如果返回值不能nil
,那么总是强制解包这样的转换是安全的.
以下是我尝试将NSData转换为NSString但代码返回"Program received signal:SIGABRT"的代码.
NSString *string= [NSString stringWithUTF8String:[data bytes]];
Run Code Online (Sandbox Code Playgroud)
要么
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
还有其他更好的方法吗?
我知道之前已经问过这个问题了,我已经采用了几种方法,但是它们不起作用.
以下是我已经尝试过的:
NSString *newStr = [NSString stringWithUTF8String:[responseData bytes]];
NSString *newStr = [NSString stringWithFormat:@"%.*s", [responseData length], [responseData bytes]];
Run Code Online (Sandbox Code Playgroud)
它们都不起作用.在第一种情况下,它用null填充newStr.在第二,它填充垃圾字符.我从调试器日志(po responseData)知道我得到了有效的响应,就像bbbbbb 00 bbbbbb.[服务器将它们作为字节数组发送]
该怎么办?
编辑:我从http请求响应中接收此数据 - 使用ASIHTTPRequest库,以防任何人可以在该行上提供帮助.
我得到的NSData字节看起来像这样:
2d2d2d2d 2d2d2d2d 2d2d2d2d 2d2d2d2d 2d2d2d2d 2d2d2d2d 2d2d2d2d 2d353731 35343039 37373139
34383437 34303832 30333533 30383232 380d0a43 6f6e7465 6e742d44 6973706f 73697469 6f6e3a20
666f726d 2d646174 613b206e 616d653d 2266696c 65223b20 66696c65 6e616d65
3d224265 61636820 426f7973 202d2047 6f6f6420 56696272 6174696f 6e732e6d
Run Code Online (Sandbox Code Playgroud)
我想将它转换为NSString,我试过这个方法,但它给了我一个字符串的零:
NSString* postInfo = [[NSString alloc] initWithBytes:[postDataChunk bytes] length:[postDataChunk length] encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud) 我在NSData
类别中有NSData-to-NSString转换,因为我总是使用NSString
方法:initWithData:encoding:
.但是,根据这个答案,/sf/answers/172749951/,并不是那么简单.
到目前为止,我在我的NSData
类别中使用了此方法,以便与其他数据对象中的方法保持一致,这些方法从具有相同名称的方法返回字符串:
- (NSString *) stringValue
{
return [[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding];
}
Run Code Online (Sandbox Code Playgroud)
到目前为止它是成功的,但我想确定一个字符串是否以null结尾,以决定是否应该使用此方法,也来自答案链接:
NSString* str = [NSString stringWithUTF8String:[data bytes]];
Run Code Online (Sandbox Code Playgroud)
如何确定UTF-8编码是否NSData
包含以空值终止的字符串?
得到下面的答案后,我为我的NSData
Category方法编写了更全面的实现,stringValue
:
- (NSString *) stringValue
{
//Determine if string is null-terminated
char lastByte;
[self getBytes:&lastByte range:NSMakeRange([self length]-1, 1)];
NSString *str;
if (lastByte == 0x0) {
//string is null-terminated
str = [NSString stringWithUTF8String:[self bytes]];
} else {
//string is not null-terminated
str = [[NSString …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个多部分图像数据上传请求。我通过 UIImageJPEGRepresentation 从 UIImage 获取 NSData 但是当我尝试将数据转换为字符串时我得到 nil 值
我已按照此链接将 NSData 转换为 NSString
将 UTF-8 编码的 NSData 转换为 NSString
这是我的代码:-
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];
NSMutableString *body = [NSMutableString string];
[body appendFormat:@"--%@\r\n", boundary];
int i =0;
for (UIImage *image in imagesArray) {
NSData *data = UIImageJPEGRepresentation(image, 1.0);
[body appendFormat:@"Content-Disposition:form-data; name=\"userfile[]\"; filename=\"image%d.jpeg\"\r\n",i];
[body appendFormat:@"Content-Type: image/*\r\n\r\n"];
NSString *str = [NSString stringWithUTF8String:[data bytes]]; //this variable should not be nil
[body appendFormat:@"%@",str];
if (error)
{
NSLog(@"%@", error);
}
i++; …
Run Code Online (Sandbox Code Playgroud) objective-c ×8
ios ×6
iphone ×3
nsdata ×3
nsstring ×3
xcode ×3
cocoa ×1
encoding ×1
json ×1
nsxml ×1
nsxmlelement ×1
nsxmlparser ×1
string ×1
swift ×1
utf-8 ×1
webarchive ×1
webview ×1
xml-parsing ×1